LINUX.ORG.RU

Распаковать zip в папках

 , , ,


0

2

Задача такая: Есть liveusb Ubuntu 12.04. Есть подключаемый USB HDD.

В на этом диске есть папка ebooks, в папке ebooks есть куча zip файлов, каждый из которых надо распаковать, надо учесть, что в каждом из zip-файлов запакованы файлы с кириллическими названиями, эти названия после распаковки должны выглядеть нормально. Так же, в некоторых из папок файлы уже распакованы, в этом случае файлы нужно перезаписать.

Как это реализовать при помощи bash?

★★

на этом диске есть папка ebooks, в папке ebooks есть куча zip файлов, каждый из которых надо распаковать

Если упаковано не древними версиями zip-архиваторов, то с русскими буквами не должно быть проблем.
С длинными именами могут быть проблемы.

Как вариант для раскаковки:

IFS=$'\n'
for ZIP in `find -type f -name "*.zip"`; do
 unzip -o "$ZIP" -d /mnt/usb-disk/
done

DiMoN ★★★
()
Последнее исправление: DiMoN (всего исправлений: 1)
Ответ на: комментарий от DiMoN

Для теста модифицирую скрипт так:

IFS=$'\n'
for ZIP in `find -type f -name "*.zip"`; do
 unzip -o "$ZIP" -d /home/user/zipzap/
done
Запускаю:
sh go.sh
unzip:  cannot find or open ./zipzap/zappe (4-я копия)/doc doc.txt.zip
./zipzap/zappe (копия)/doc doc.txt.zip
./zipzap/zappe (9-я копия)/doc doc.txt.zip
./zipzap/zappe (3-я копия)/doc doc.zip
./zipzap/zappe (6-я копия)/doc doc.txt.zip
./zipzap/zappe (8-я копия)/doc doc.txt.zip
./zipzap/zappe (12-я копия)/doc doc.txt.zip
./zipzap/zappe (другая копия)/doc doc.txt.zip
./zipzap/zappe (5-я копия)/doc doc.txt.zip
./zipzap/zappe (10-я копия)/doc doc.txt.zip
./zipzap/zappe/doc doc.txt.zip
./zipzap/zappe (11-я копия)/doc doc.txt.zip
./zipzap/zappe (7-я копия)/doc doc.txt.zip, ./zipzap/zappe (4-я копия)/doc doc.txt.zip
./zipzap/zappe (копия)/doc doc.txt.zip
./zipzap/zappe (9-я копия)/doc doc.txt.zip
./zipzap/zappe (3-я копия)/doc doc.zip
./zipzap/zappe (6-я копия)/doc doc.txt.zip
./zipzap/zappe (8-я копия)/doc doc.txt.zip
./zipzap/zappe (12-я копия)/doc doc.txt.zip
./zipzap/zappe (другая копия)/doc doc.txt.zip
./zipzap/zappe (5-я копия)/doc doc.txt.zip
./zipzap/zappe (10-я копия)/doc doc.txt.zip
./zipzap/zappe/doc doc.txt.zip
./zipzap/zappe (11-я копия)/doc doc.txt.zip
./zipzap/zappe (7-я копия)/doc doc.txt.zip.zip or ./zipzap/zappe (4-я копия)/doc doc.txt.zip
./zipzap/zappe (копия)/doc doc.txt.zip
./zipzap/zappe (9-я копия)/doc doc.txt.zip
./zipzap/zappe (3-я копия)/doc doc.zip
./zipzap/zappe (6-я копия)/doc doc.txt.zip
./zipzap/zappe (8-я копия)/doc doc.txt.zip
./zipzap/zappe (12-я копия)/doc doc.txt.zip
./zipzap/zappe (другая копия)/doc doc.txt.zip
./zipzap/zappe (5-я копия)/doc doc.txt.zip
./zipzap/zappe (10-я копия)/doc doc.txt.zip
./zipzap/zappe/doc doc.txt.zip
./zipzap/zappe (11-я копия)/doc doc.txt.zip
./zipzap/zappe (7-я копия)/doc doc.txt.zip.ZIP.
Ничего, разумеется не распаковалось, т.к.:
cannot find or open ./zipzap/zappe (4-я копия)/doc doc.txt.zip
Как пофиксить?

Pidgin ★★
() автор топика
Ответ на: комментарий от Pidgin

Понял в чем дело: Вот тут надо входить в каждую подпапку:

for ZIP in `find -type f -name "*.zip"`; do
Но как это сделать? Не админ, баша не знаю, извините.

Pidgin ★★
() автор топика
Ответ на: комментарий от dikiy

Надо распаковать в ту же папку, где лежит zip-архив.

А удалять zip-архивы, если я не ошибаюсь, надо так:

rm /mnt/usb-disk/*/*.zip

?

Pidgin ★★
() автор топика
Последнее исправление: Pidgin (всего исправлений: 1)
Ответ на: комментарий от dikiy

А как сделать, так чтобы распакованные файлы сохранялись не в /mnt/usb-disk, а в тех папках, где лежит zip?

Pidgin ★★
() автор топика
Ответ на: комментарий от Pidgin

А как сделать, так чтобы распакованные файлы сохранялись не в /mnt/usb-disk, а в тех папках, где лежит zip?

замени строчку на

unzip -o {} -d dirname {} \;
dikiy ★★☆☆☆
()
Ответ на: комментарий от Pidgin

тебе не баш учить надо, а просто знать, какими возможностями обладают стандартные программы.

но конечно баш в пределах знания о потоках, переменных и т.п. надо знать, да.

dikiy ★★☆☆☆
()

В мамках пробовал распаковывать, вендузоид?

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.