Делает daemon
управляйте нуждаются в a &
в конце. Я не думаю, что это делает. Это может быть источником Вашей проблемы.
Можно использовать tar
или cpio
или pax
(если какой-либо из них доступен) скопировать определенные файлы, создавая целевые каталоги по мере необходимости. С tar GNU, для копирования всех регулярных названных файлов *.txt
или README.*
под текущим каталогом к той же иерархии под ../destination
:
find . -type f \( -name '*.txt' -o -name 'README.*' \) |
tar -cf - -T - |
tar -xf - -C ../destination
С просто find
, cp
, mkdir
и оболочка, можно циклично выполниться по желаемым файлам с find
и запустите команду оболочки для копирования каждого из них. Это является медленным и громоздким, но очень портативным. Отрывок оболочки получает целевой корневой каталог как $0
и путь к исходному файлу как $1
; это создает целевое дерево каталогов по мере необходимости (обратите внимание, что полномочия каталога не сохраняются кодом ниже), затем копирует файл. Отрывок ниже работ над любой системой POSIX и большинством установок BusyBox.
find . -type f \( -name '*.txt' -o -name 'README.*' \) -exec sh -c '
mkdir -p "$0/${1%/*}";
cp -p "$1" "$0/$1"
' ../destination {} \;
Можно сгруппироваться sh
вызовы; это немного сложно, но может быть в известной мере быстрее.
find . -type f \( -name '*.txt' -o -name 'README.*' \) -exec sh -c '
for x; do
mkdir -p "$0/${x%/*}";
cp -p "$x" "$0/$x";
done
' ../destination {} +
Если у Вас есть удар ≥4 (я не знаю, является ли Bash Мерзавца достаточно недавним), Вы не должны звонить find
, можно использовать **
шаблон шарика для рекурсивного вызова в подкаталоги.
shopt -s globstar extglob
for x in **/@(*.txt|README.*); do
mkdir -p "../destination/${x%/*}"
cp -p -- "$x" "../destination/$x"
done
Можно попробовать что-то вроде этого:
ls | grep 2 | xargs -n1 -t -i cp -R {} ../testdirTwo/{}
Я попробовал это на своем Linux, и он работает. Отметьте-R параметр в CP, это для рекурсивного, если Вы желаете. Также отметьте-i параметр o xargs, он вставит, он производится туда, где Вы помещаете {}.-t только для повторения команды к stderr.
Моя тестовая структура каталогов была похожа на это:
$ find .
.
./2
./2/f2
./1
./1/f1
./f1
./f2