1

Есть ли какой-нибудь способ найти из оболочки все файлы, соответствующие шаблону файла, включая файлы внутри архивов (в частности, zip-архивы)?


Пакет моделирования "VASP" производит файлы, называемые "OUTCAR" среди других. Эти файлы теперь распределены по сотням папок, большинство из которых, но не все, заархивированы, чтобы ускорить инкрементное резервное копирование за счет уменьшения беспорядка файлов. Теперь я хочу запускать как скрипт для всех этих сжатых и незаархивированных файлов OUTCAR.

Конечно, я мог бы написать скрипт, который использует "find" для поиска разархивированных файлов и комбинацию find, grep и unzip для поиска заархивированных файлов, но было бы предпочтительнее стандартное решение, если оно есть, так как оно позволяло бы легко относиться к zip-файлам как к папкам readonly в моих скриптах.

В идеале должен быть набор команд, имитирующих поведение общих команд оболочки, таких как cat , grep , find за исключением того, что они допускают zip-файлы как часть имен файлов.

Я бы не потребовал, чтобы такие инструменты могли обрабатывать вложенные zip-файлы. Самой причиной, по которой я переключился с .tar.gz на .zip является наличие файлового индекса, доступного без извлечения чего-либо (довольно большая разница в скорости для 100 МБ архивов с высокой степенью сжатия), который частично теряется при использовании вложенных архивов.

Кстати, я использую Windows 7 с Cygwin (хотя это должно иметь значение только в отношении производительности процесса создания).

3 ответа3

0

Если вы работаете в OSX, попробуйте те же утилиты с префиксом az к их названию. Они будут пролистывать как заархивированные, так и не заархивированные файлы.

Из справочных страниц:

zgrep, zegrep, and zfgrep act like grep, egrep, and fgrep, respectively, but accept input files compressed with the compress(1) or gzip(1) compression utilities.

а также

zcat  is identical to gunzip -c.

На Debian Linux

zgrep

это скрипт-оболочка, которая разархивирует zip и greps через него, так что, по крайней мере, вам не придется писать это самостоятельно.

0

Нужно потратить всего несколько минут, чтобы расширить пример python os.walk, чтобы а) вывести список файлов, соответствующих вашему шаблону (используя re в списках файлов) и б) когда он встретится с файлом zip /tared /etc, откройте их используя соответствующую библиотеку и шаблон соответствуют именам файлов внутри. (Извините, на самом деле я не могу написать это для вас, потому что я должен идти на работу).

0

Вы можете перечислить содержимое файла zip командой wint unzip следующим образом

 unzip -l file.zip

Изменить: На самом деле этот ответ может быть очень полезным для того, что вы пытаетесь достичь

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .