У меня есть каталог, который состоит из множества подкаталогов, и каждый подкаталог содержит разные файлы, такие как:
Каталог 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
Но ни одна из них не работает.
Как я могу это исправить?
Можно использовать 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
в любом подкаталоге рекурсивно.
Попробуйте найти файлы и заархивируйте их в отдельные файлы:
find . -name Run2.csv -print | zip Run2.zip -@
вы можете использовать что-то вроде поиска и архивирования всех (например) Run2.csv
файлов:
zip run2.zip `find . -name Run2.csv`
По предложению, если OP ожидает специальных символов (например, пробел) в именах файлов / каталогов, можно использовать команду как:
find . -name Run2.csv -exec zip run2.zip {} +