«найти» файлы или папки на любой глубине, которые соответствуют регулярному выражению, и скопировать все в одну папку? (Консолидация) - PullRequest
0 голосов
/ 07 апреля 2020

Как использовать команду bash 'find', чтобы найти все папки и на любой глубине, начиная с базовой папки, соответствующей регулярному выражению, а затем скопировать все соответствующие файлы и папки в одна папка вывода?

Например, если у меня есть следующее дерево каталогов:

# EXISTING/INPUT DIRECTORY TREE
./indir_a
  file_1.txt
  file_2.txt
./indir_b
  file_1.jpg
  file_2.jpg
./indir_c
  file_1.pdf
  file_2.pdf
./indir_1
  file_a
  file_b
  file_c
./indir_2
  file_e
  file_f
  file_g

как мне скопировать все файлы и папки, которые соответствуют "_1" (и "_2"), так что Я получаю дерево выходных папок, как это?

# OUTPUT DIRECTORY TREE (copies only)
./outdir_1/
  file_1.txt
  file_1.jpg
  file_1.pdf
  file_a
  file_b
  file_c

./outdir_2/
  file_2.txt
  file_2.jpg
  file_2.pdf
  file_e
  file_f
  file_g

Спасибо.

1 Ответ

0 голосов
/ 07 апреля 2020

Ваш вопрос и ваше название не совпадают. Но ...


Скопируйте все соответствующие файлы в один каталог

find /source/path -type f -name "*something*" -exec /bin/mv {} /target/dir \; -print

Очевидно, что если у вас 2 файла с одинаковым именем, только второй один будет в целевом каталоге.


Если вам также необходимо скопировать структуру каталогов

find /source/path -type f -name "*something*" -print >list_of_files.txt

tar -cvpf tocopy.tar -T list_of_files.txt

-T FILE совпадает с --files-from=FILE. Нужно добавить файлы в tar из ФАЙЛА.

Затем распаковать tocopy.tar в каталог / target / dir.

cd /target/dir
tar -xvpf tocopy.tar

Это можно объединить в один tar -c... | tar -x..., но это оставлено в качестве упражнения: -)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...