Копировать список файлов во вложенных подкаталогах - PullRequest
0 голосов
/ 21 июня 2020

У меня есть набор подкаталогов с файлами внутри:

├── dir1
│   ├── file_a.type
│   ├── file_b.type
│   ├── file_c.type
│   └── file_d.type
├── dir2
│   ├── file_e.type
│   ├── file_f.type
│   ├── file_g.type
│   └── file_h.type
└── README.md

Я могу гарантировать уникальность каждого имени файла. Соглашение об именах каталогов: n[some unique random number].

У меня есть текстовый файл с подмножеством этих файлов

file_g.type
file_a.type
file_e.type

Я хотел бы скопировать все файлы, соответствующие именам в этом тексте файл в новый каталог.

Я пробовал использовать xargs для копирования, но это не работает из-за подкаталогов.

xargs -a files.txt cp -t new_dir each

Я мог бы рекурсивно скопировать все файлы в подкаталогах. каталоги в новый каталог и go оттуда. Однако это невозможно из-за размера диска и проблем с пропускной способностью.

Какой эффективный способ сделать это с помощью стандартных bash утилит?

1 Ответ

2 голосов
/ 21 июня 2020

Если у вас есть имена файлов в файле с именем files.txt:

while read file
do
    cp dir[12]/"${file}" -t new_dir
done < files.txt

С xargs это можно сделать следующим образом:

xargs -a files.txt -IFILE bash -c 'cp dir[12]/"FILE" -t new_dir'
...