Как заархивировать определенные файлы, которые находятся в подкаталогах

У меня есть каталог, который состоит из множества подкаталогов, и каждый подкаталог содержит разные файлы, такие как:

Каталог All содержит подкаталоги A, B, C, and D. Каждый подкаталог содержит файлы, такие как:

A (Run1.csv, Run4.csv)
B (Run2.csv, Run3.csv)
C (Run1.csv, Run3.csv)
D (Run2.csv, Run4.csv)

Как видите, каждый файл имеет разные дубликаты в разных подкаталогах. Например, Run1.csv в папке A содержит данные, отличные от Run1.csv в папке C.

Что я хочу сделать, так это то, что я хочу сжать определенный файл запуска, например, я хочу сжать все файлы run2. Я использовал следующие команды:

zip run2.zip All Run2.csv 

zip run2.zip Run2.csv 

Но ни одна из них не работает.

Как я могу это исправить?

3
задан 15 April 2019 в 14:01

3 ответа

Можно использовать bash Расширение пути следующим образом:

zip run2.zip */Run2.csv

*/Run2.csv соответствует каждому названному файлу Run2.csv в любом подкаталоге. Если у Вас есть очень много файлов, которые соответствуют шарику, это перестало работать из-за оболочки ARG_MAX предел. Для работы вокруг этого используйте:

printf '%s\0' */Run2.csv | xargs -0 zip run2.zip

Это использует встроенное printf создавать разграниченный нулем список файлов соответствия и каналов это к xargs, который звонит zip так же часто по мере необходимости. Как add zipрежим по умолчанию, это обновляет архив, добавляющий файлы к нему.

Если необходимо вырыть далее в неизвестное или изменяющееся количество подкаталогов, установить bash globstar опция с

shopt -s globstar

и использование:

zip run2.zip **/Run2.csv  # or respectively
printf '%s\0' **/Run2.csv | xargs -0 zip run2.zip

**/Run2.csv соответствует каждому названному файлу Run2.csv в любом подкаталоге рекурсивно.

Дальнейшее чтение

6
ответ дан 15 April 2019 в 14:01

Попробуйте найти файлы и заархивируйте их в отдельные файлы:

find . -name Run2.csv -print | zip Run2.zip -@
0
ответ дан 15 April 2019 в 14:01

вы можете использовать что-то вроде поиска и архивирования всех (например) Run2.csv файлов:

zip run2.zip `find . -name Run2.csv`

По предложению, если OP ожидает специальных символов (например, пробел) в именах файлов / каталогов, можно использовать команду как:

find . -name Run2.csv -exec zip run2.zip {} +
0
ответ дан 15 April 2019 в 14:01

Другие вопросы по тегам:

Похожие вопросы: