Найти список файлов из текстового файла в подкаталогах и поместить в tarball?

Найти список файлов из текстового файла в подкаталогах и поместить в tarball?

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

tar -cvf allfiles.tar -T mylist.txt

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

Есть ли способ объединить команду «find» с командой tar, чтобы найти файлы в моем списке, где бы они ни находились в подкаталогах?

решение1

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

Если это не имеет особого значения, можно сделать следующее:

find <main_directory> | grep -f mylist.txt

И затем используйте список для вашей tarкоманды. Полная команда может выглядеть так:

tar cvf allfiles.tar -T <(find <main_directory> |
    grep -f mylist.txt --color=never)

Заметит васдолжениспользуйте --color=never, в противном случае, если цвета активны для вашего grep, вы отправите неверные входные данные для tar.

Чтобы игнорировать различия в регистре, в данном случае в grep, который на самом деле являетсяфильтрацияфайлы, вы можете просто добавить флаг -i:

tar cvf allfiles.tar -T <(find <main_directory> |
    grep -i -f mylist.txt --color=never)

Связанный контент