команда cp, щоб виключити копіювання певних файлів


35

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

Відповіді:


57

Використання rsync:

rsync -avr --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


3

Пізно в грі, але ось зовсім інше рішення, використовуючи звичайний bash та 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

1
Для негативних збігів вам потрібно включити розширені глобуси:, shopt -s extglobтакож вам не потрібно експортувати GLOBIGNORE: це повинно змінити поведінку поточної оболонки, більшість дочірніх програм це не хвилює.
муру
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.