Я бы предложил использовать find для этого.
Давайте создадим несколько испытуемых:
$ mkdir -p ./testing/test{1,2,3,4}
$ touch ./testing/test{1,2,3,4}/test{a,b}
Приведет к:
$ ls -R ./testing
./testing:
test1 test2 test3 test4
./testing/test1:
testa testb
./testing/test2:
testa testb
./testing/test3:
testa testb
./testing/test4:
testa testb
Теперь беги
$ mkdir ./testing/copy
$ find ./testing/ -mindepth 1 -maxdepth 1 ! -name test1 ! -name test3 ! -name copy -execdir cp -R '{}' ./copy/ ';'
Приведет к:
$ ls -R ./testing/
./testing/:
copy test1 test2 test3 test4
./testing/copy:
test2 test4
./testing/copy/test2:
testa testb
./testing/copy/test4:
testa testb
./testing/test1:
testa testb
./testing/test2:
testa testb
./testing/test3:
testa testb
./testing/test4:
testa testb
Исходная информация:
Сводка: найдите каталоги, которые необходимо скопировать, и выполните команду копирования. В этом случае давайте скопируем все каталоги, кроме «test1» и «test3».
Опция -mindepth 1 предотвратит включение в find файла . и, возможно, .. каталоги, так как они находятся на глубине 0.
Параметр -maxdepth 1 предотвратит копирование каждого отдельного подкаталога в find. Команда cp -R обрабатывает подкаталоги, поэтому они закрыты.
Используйте -execdir вместо -exec, чтобы не указывать весь путь в качестве целевого каталога для команды cp.
НЕ ЗАБЫВАЙТЕ сделать mkdir целевой директории перед запуском поиска и НЕ ЗАБЫВАЙТЕ исключать эту директорию из результатов! Отсюда ! -name copy в моем примере.
Я надеюсь, что это указывает вам в правильном направлении.
person
Christian Stadegaart
schedule
04.06.2012