Сохранить дерево каталогов при копировании файлов с помощью cp - PullRequest
4 голосов
/ 23 августа 2011

У меня есть около 1000 папок, из которых я хочу извлечь один файл для загрузки на сервер, но мне нужно сохранить дерево каталогов.

cp */myFile.txt ../newTree

Это то, что я в основном хочу сделать, но вместо того, чтобы каждый файл сохранялся в ../newTree/myFile.txt, я хочу, чтобы он был ../newTree/*/myFile.txt, где * - это подстановочный знак из команды cp.

Мне не удалось найти флаг в файле man для этого, поэтому я думаю, что мне может понадобиться другая утилита, кроме cp

Ответы [ 2 ]

8 голосов
/ 23 августа 2011

С rsync:

find ./ -name myFile.txt -print0|rsync -0adv --files-from=- ./ ../newTree/

Без rsync:

Вы можете найти все файлы, для каждого файла вы создаете каталог в newTree, и копируете файл в него.

for file in */myFile.txt; do
    dir=$(dirname "$file")
    mkdir -p "../newTree/$dir"
    cp "$file" "../newTree/$dir"
done
4 голосов
/ 23 августа 2011

Сохраните все файлы в tar архиве, затем распакуйте его на сервер.

...