Он действительно теряет смысл. grep
использует почти те же шаблоны regex, что и bash.
Если у вас есть список файлов в файле или вы можете сгенерировать их с помощью команды, вы можете использовать одну команду GNU tar:
tar cf foo.tar -T list-of-files --transform 's:.*/::'
Преобразование по-прежнему сохраняет каталоги, но полностью выравнивает структуру. Итак, вам нужен какой-то способ фильтрации каталогов, следовательно, нужен список файлов.
Вы можете использовать -C
несколько раз (переход из одного каталога в другой):
tar czvf archive.tar.gz -C /home/martin/cvs/ops/cisco/b s1 s2 -C ../../extreme/b r3 -C ../../j/b r5
Обратите внимание, что каждый - Параметр C
интерпретируется относительно текущего каталога в этой точке (или вы можете просто использовать абсолютные пути).
Вы можете добавлять файлы в архив один за другим:
tar cf /tmp/archive.tar -C /home/martin/cvs/ops/cisco/b s1
tar rf /tmp/archive.tar -C /home/martin/cvs/ops/cisco/b s2
tar rf /tmp/archive.tar -C /home/martin/cvs/ops/extreme/b r3
tar rf /tmp/archive.tar -C /home/martin/cvs/ops/j/b r5
Вы можете написать сценарий, чтобы упростить задачу: для каждого пути запустите tar rf
с базовый каталог в качестве значения параметра -C
и базовое имя файла без пути для добавления.