команда cp должна игнорировать некоторые файлы - PullRequest
34 голосов
/ 09 сентября 2010

Иногда мне нужно выполнить следующую команду

cp -rv demo demo_bkp

Однако я хочу игнорировать все файлы в каталоге .git. Как мне этого добиться? Копирование файлов .git занимает много времени, и мне эти файлы не нужны.

Ответы [ 3 ]

84 голосов
/ 09 сентября 2010

Чтобы конкретно игнорировать каталог git, я бы сначала попытался git export.

Но в целом, чтобы скопировать дерево каталогов, исключая определенные файлы или папки, я бы рекомендовал использовать rsync вместо cp. Синтаксис в основном тот же, но rsync имеет способ больше параметров, включая один для исключения выбранных файлов:

rsync -rv --exclude=.git demo demo_bkp

Смотри, например, справочная страница для получения дополнительной информации.

8 голосов
/ 09 сентября 2010

OK. Готовьтесь. Это не красиво.

find demo -depth -name .git -prune -o -print0 | cpio -0pdv --quiet demo_bkp

Что здесь происходит?

  1. find demo | cpio -p demo_bkp находит файлы, соответствующие любым критериям, которые вы хотите, и использует cpio для их копирования (так называемый «сквозной» режим).

  2. find -depth изменяет порядок печати файлов в соответствии с порядком, необходимым для cpio.

  3. find -name .git -prune говорит, что находить не нужно искать .git каталогов.

  4. find -print0 | cpio -0 обнаружил использование символов NUL (\0) для разделения имен файлов. Это сделано для максимальной надежности в случае наличия файлов со странными именами с пробелами, переводами строки или другими необычными символами.

  5. cpio -d создает каталоги по мере необходимости.

  6. cpio -v --quiet печатает каждое имя файла, опуская сообщение «X блоков скопировано», которое обычно печатает cpio в конце.

2 голосов
/ 09 сентября 2010

Я думаю, что это поможет:

cd demo
find . -not -path \*/.\* -type d -exec mkdir -p -- ../demo_bkp/{} \;
find . -not -path \*/.\* -type f -exec cp -- {} ../demo_bkp/{} \;

Сначала находит и создает каждый каталог.Затем находит и копирует каждый файл.

Обратите внимание, что он не будет работать со специальными файлами (символическими ссылками и т. Д.).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...