Як перелічити вміст усіх .zip-файлів у папці та виконувати певний файл для певного файлу?


28

У мене 348 zip-файлів, і я хочу знайти файл, який знаходиться в одному з zip-файлів, але unzip -lвін не працює з підказками?

Як я можу перерахувати вміст усіх .zipфайлів і grepчерез об'єднаний список усіх файлів, що містяться у зіпсах?

Відповіді:


17

Тут використовується zipinfoпрекрасне рішення. Однак, як правило, коли ви хочете застосувати команду до списку файлів і команда не приймає список файлів, ви можете використовувати forцикл:

for file in *.zip; do
    unzip -l "$file"
done \
| grep "\.zip\|setup"

Якщо у файлі, який ви шукаєте, в ньому є пробіли типу:, your fileу регулярному виразі grep вам потрібно вийти з кожного пробілу, як нахил у нижній частині grep "\.zip\|your\ file".


Працює чудово, єдина проблема полягає в тому, що на ній не відображається назва поштового індексу,
Едуард Флорінеску

Я відредагував вашу публікацію та додав регулярний вираз, щоб відобразити також ім’я файлу, де знайдено налаштування, +1 та прийняти
Едуард Флорінеску

О так, я забув цитати навколо аргументу unzip, як бентежно.
Конрад Рудольф

1
@JaySullivan Не використовуйте цей код, він не працює для шляхів, що містять пробіли. Ніколи не трубопровід виводу ls. Ви можете використовувати findзамість цього.
Конрад Рудольф

12

Можна використовувати zipinfo. Він включений в установку Ubuntu за замовчуванням. Перегляньте сторінку керівництва для отримання додаткової інформації.

Наприклад, щоб шукати зразок setupу купі zip-файлів у поточному каталозі, використовуйте цю команду:

find ./ -iname *zip 2> /dev/null -print0 | xargs -0 zipinfo | grep setup

Я отримую caution: filename not matched: case1.zip... caution: filename not matched: case348.zipна кожен zip, тестований на двох ОС Ubuntu, 11.10 та 12.04.
Едуард Флорінеску

@EduardFlorinescu Спробуйте оновити відповідь. Хоча відповідь спрацювала для мене
Анвар

проблема полягає в тому, що файл може містити це, setupі він ставить ту саму помилку, хоча він працює так:zipinfo -l * | grep "setup"
Едуард Флоринеску

Я відредагував відповідь. Я думаю, що зараз це більш міцно
Anwar

1
Дякую, +1 за докладені зусилля, але все одно це не спрацює, якщо ZIP-файл має пробіли у своєму імені.
Едуард Флорінеску

6

Для переліку файлів у zip-архіві можна скористатися наступною командою.

unzip -l

Для отримання архіву стисненого архіву слід скористатись утилітами для стиснення архіву, побудованими для роботи з таким типом формату архіву.

Для архівів zip:

zipgrep --help  
usage: zipgrep [egrep_options] pattern zipfile [members...]
Uses unzip and egrep to search the zip members for a string or pattern.

Для архівів дьогтю:

zgrep --help
Usage: /bin/zgrep [OPTION]... [-e] PATTERN [FILE]...
Look for instances of PATTERN in the input FILEs, using their
uncompressed contents if they are compressed.

OPTIONs are the same as for 'grep'.

Є кілька інших інструментів, які також працюють з архівами. Ви можете подати трубопровід, поставлений в греп, щоб зробити те ж саме.

zcat
zcat my.archive.zip | grep "some text"

Або ви можете скористатися функцією пошуку цих інструментів

zless
zmore
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.