Как я могу рекурсивно скопировать файлы расширением файла, сохранив структуру каталогов?

В командной строке Linux я хотел бы скопировать (очень большой) набор .txt файлы из одного каталога (и его подкаталоги) другому.

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

71
задан 27.05.2015, 13:26

3 ответа

Вы можете использовать find и cpio, чтобы сделать это

cd /top/level/to/copy
find . -name '*.txt' | cpio -pdm /path/to/destdir

(-updm for overwrite destination content.)
96
ответ дан 07.12.2019, 08:11
cd /source/path
find -type f -name \*.txt -exec install -D {} /dest/path/{} \;
7
ответ дан 07.12.2019, 08:11

как насчет того, чтобы сначала скопировать его с помощью

cp -r /old/folder /new/folder

, а затем перейти в новую папку и запустить

find . -type f ! -iname "*.txt" -delete

или просто

cp -r /old/folder /new/folder && find . -type f ! -iname "*.txt" -delete

Edit: ok Вы хотите одну команду, которая фильтрует (я не тестировал это, потому что моя система не имеет команды cpio!). Вот где я ее нашел: http://www.gnu.org/software/findutils/manual/html_mono/find.html#Copying-A-Subset-of-Files

find . -name "*.txt" -print0 |
     cpio -pmd0 /dest-dir

Please please test this first, because I haven't tried it yet. Если бы кто-нибудь проверил, было бы здорово.

1
ответ дан 07.12.2019, 08:11

Теги

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