Розпакування партії файлів


33

Коли я намагаюся

 unzip filename.zip

це працює. Однак мені потрібно розпакувати ряд поштових файлів.

Чому:

 find . -name "*.zip" -print0 | xargs -0 unzip

або

 ls *.zip | xargs unzip

не працює?

В обох випадках я отримую повідомлення "застереження: ім'я файлу не відповідає:".

Відповіді:


48

Ви можете задати команду:

$ unzip '*.zip'

Подивіться тут для довідки .


Я не сказав це чітко, але вони не всі в одному каталозі. Отже, мені потрібен результат пошуку.
jeannoburto

4
Спасибі. Це може цілком відповідати фактичному питанню, але це вирішило мою проблему. Я намагався, unzip *і він повертався caution: filename not matchedдля кожного файлу, але unzip '*.zip'робив роботу.
Іван

27

Ваші команди не працюють, оскільки вони заповнюють усі файли в одному командному рядку. Хоча це працює з більшістю програм, unzipперший аргумент буде сприйматися як zip-файл, а будь-який після першого - як файли, щоб витягнути з нього. Вам потрібно виконати команду один раз для кожного файлу:

find . -name "*.zip" -print0 | xargs -0 -n1 unzip

Або

find . -name '*.zip' -exec unzip {} \;

Другий здається кращим у випадку, якщо справді багато файлів. (Інакше він скаржився, що команда занадто довга з xargs)
Recct

5

У bash ви також можете зробити наступне:

for i in *.zip; do
    unzip "$i"
done

Також unzipможна взяти -dкомутатор, щоб ви могли орієнтувати вихід на різні місця.

Наприклад:

uzdir=/path/to/unzips
for i in *.zip; do
    [ -d "$uzdir/$i" ] || mkdir -p "$uzdir/$i"
    unzip "$i" -d "$uzdir/$i"
done

1

Є набагато простіше рішення, ніж цикли, наведені вище, використовуйте -dпрапор каталогу :

unzip -o somefiles.zip -d $directoryPath

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