Як перелічити вміст усіх .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.