
У меня есть список файлов, которые мне нужно заархивировать. Обычно я использую
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)