команда cp, чтобы исключить копирование определенных файлов

Есть ли способ использовать команду 'cp' для копирования каталога и исключения определенных файлов / подкаталогов в нем?

55
задан 14 June 2016 в 01:15

2 ответа

Используйте rsync:

rsync -av --exclude='path1/to/exclude' --exclude='path2/to/exclude' source destination

Обратите внимание, что использование source и source/ отличается. Конечная косая черта означает копирование содержимого папки source в destination. Без завершающей косой черты это означает копирование источника папки в destination.

В качестве альтернативы, если у вас есть много каталогов (или файлов) для исключения, вы можете использовать --exclude-from=FILE, где FILE - имя файла, содержащего файлы или каталоги для исключения.

--exclude также может содержать символы подстановки, такие как --exclude=*/.svn*

Скопировано из: https://stackoverflow.com/a/2194500/749232

Если вы хотите использовать сам cp:

find . -type f -not -iname '*/not-from-here/*' -exec cp '{}' '/dest/{}' ';'

Предполагается, что целевая структура каталогов такая же, как и у источника.

Скопировано из: https://stackoverflow.com/a/4586025/749232

0
ответ дан 14 June 2016 в 01:15

Поздно в игру, но вот совсем другое решение с помощью простого удара и CP: можно использовать глобальную спецификацию файла при наличии некоторых проигнорированных файлов.

Предполагают, что каталог содержит файлы:

$ ls *
listed1  listed2  listed3  listed4  unlisted1  unlisted2  unlisted3

Используя переменная GLOBIGNORE:

$ export GLOBIGNORE='unlisted*'
$ ls *
listed1  listed2  listed3  listed4

Или с более определенными исключениями:

$ export GLOBIGNORE='unlisted1:unlisted2'
$ ls *
listed1  listed2  listed3  listed4  unlisted3

Или использование отрицательные соответствия :

$ ls !(unlisted*)
listed1  listed2  listed3  listed4

Это также поддерживает несколько несопоставленных шаблонов:

$ ls !(unlisted1|unlisted2)
listed1  listed2  listed3  listed4  unlisted3
3
ответ дан 14 June 2016 в 01:15

Другие вопросы по тегам:

Похожие вопросы: