Резюме
Мне нужно "исправить" пакет ZIP-файлов по всей файловой системе следующим образом:
- замена " " (пробела) в их именах на "_", а также в именах файлов их содержимого
- застегните их обратно
Застрял при распаковке, потому что "$(dirname "$0")/$(basename "$0")" выдает ошибки.
Более длинное описание
Иерархия файлов:
banners/
|
germany/
| |
| active/
| | |
| | 300x250/
| | | |
| | | file.jpg
| | | AC2 xx.zip
| | |
| | 600x228/
| | |
| | file.jpg
| | AC4 xx.zip
| nautics/
|
|
austria/
|
...
Вот что я пробовал:
~/banners/> find . -name "*" -exec sh -c 'mv -- "$0" "$(0// /_)"' {} \;
Здесь я избавился от всех пробелов во всех именах файлов/каталогов от banners/
вниз.AC2 xx.zip
теперь выглядит как AC2_xx.zip
Теперь мне нужно разархивировать эти файлы .zip в новый подкаталог на том же уровне, что и сами файлы .zip, с теми же именами, что и эти файлы .zip.
Вот команда, которую я попробовал:
find . -name "*.zip" -exec sh -c 'unzip "$0" "$(dirname "$0")/$(basename "$0")"' {} \;
что дает мне кучу (полный экран) ошибок, подобных этой:
~>Архив: ./sun&sea/dugi_otok/970x250/SS4_970x250.zip
~>внимание: имя файла не совпадает: ./sun&sea/dugi_otok/970x250/SS4_970x250.zip
Для жизни меня я не могу понять это.
Повторно запустить удаление пробелов
Если это сработает и файлы будут разархивированы, план состоит в том, чтобы повторно запустить команду mv
из каталога верхнего уровня banners/
и снова заменить пробелы на "_ " опять таки. Это позаботится о содержимом файлов .zip.
Повторно заархивировать
Наконец, мне нужно повторно заархивировать эти вновь созданные подкаталоги, названные как исходные файлы .zip, и перезаписать существующие файлы .zip (которые были изначально разархивированы).
В основном повторно заархивируйте это:
~> banners/germany/active/dugi_otok/300x250/AC2_xx/(newly unzipped contents)
в:
~> banners/germany/active/dugi_otok/300x250/AC2_xx.zip
Прошу прощения за путаницу, но я не нашел лучшего способа объяснить это.