Причина в том, что в bash
, *
не включены файлы, начинающиеся с точки ( .
).
Вы можете запустить
cp A/.* B
Он предупредит вас, что не скопировал .
ни ..
, ни какие-либо подкаталоги, но это нормально.
Или, если вы хотите скопировать точечные и обычные файлы вместе, запустите
cp A/.* A/* B
Вы также можете запустить
shopt -s dotglob
cp A/* B
который будет работать bash
, но нет sh
.
И если вы не возражаете против копирования подкаталогов, то это самое простое:
cp -R A/ B
Совет: если когда-либо подстановочные знаки не делают то, что вы ожидаете, попробуйте запустить его с эхо, например
$ echo A/*
A/file1 A/file2
$ echo A/.*
A/. A/.. A/.hidden1 A/.hidden2
$ echo A/.* A/*
A/. A/.. A/.hidden1 A/.hidden2 A/file1 A/file2
$ shopt -s dotglob
$ echo A/*
A/file1 A/file2 A/.hidden1 A/.hidden2
-r
. Без-r
этого он просто пропустит каталоги.-R
привожу, тоже должен работать. Если вы считаете, что это неправильно, объясните, пожалуйста, почему.Если bash, вы можете установить
dotglob
перед копированиемИли язык программирования
Если вы не хотите устанавливать dotglob, просто
источник
A
скрыто. Он просто хочет скопировать это.То, что вы ищете, больше похоже на:
Это будет соответствовать всем точечным файлам, но не "." или "..". Большинство из приведенных выше решений хороши, если вы не работаете рекурсивно. Но как только вы захотите сделать что-то вроде:
Не опуская «..», вы копируете все из родительского каталога вниз, включая файлы без точек.
источник
.a
или.x
. Самый короткий шаблон поиска, который я нашел, соответствует каждому файлу точек, кроме.
и..
есть.[^.]*
.Я просто попробовал следующее, и это работает, просто найти ...
источник
A/.
и вA/..
качестве параметровcp
, что может быть проблематично, если OP также необходимо скопировать каталоги (используяcp -r
)Это не
cp
«s вина , это Баш: Баш расширяет*
во всех без скрытого (т.е. не отправной с.
) файлов.Bash расширится
.*
(таким образомA/.*
, в вашем случае) со всеми файлами, начинающимися с.
, но, к несчастью, он также включает.
и..
(текущий и родительский каталоги), которые вы, вероятно, захотите пропустить. (Обратите внимание, что другие оболочки, такие как zsh, не будут включать их, и IIRC также bash, после установки некоторых параметров).Простое решение может состоять в том, чтобы удалить
.
и..
из файлов, сопоставленных.*
, (очень) хакерским способом, как этот:или этот (вероятно, чище: он использует
find
для поиска файлов для копирования):но вы, вероятно, найдете более чистые решения.
источник
for loop
а затем создать дополнительныйgrep
процесс, чтобы сделать работу, какcp A/.*
?cp
будет игнорировать "." и ".." каталоги.Если они все начинаются с точки, просто используйте
A/.*
:Надеюсь это поможет!
источник
Вы можете использовать этот скрипт
источник
копия:
список:
список файлов без нисходящих каталогов:
источник
Вы должны исключить. и .. из списка файлов, переданных в cp!
Это безопасно:
источник
Это старая ветка ... но мне всегда удавалось копировать все файлы. Включая файлы / папки, начинающиеся с «.»
Пример скопирует все файлы и папки:
cp -aup /root/.* / backup / root /
источник