2016-08-21 11 views
0

Резюме
мне нужно «исправить» партию .zip файлов, всей файловой системы, с помощью:Как распаковать и повторно zip-файлы в подкаталог с тем же именем, что и .zip-файл?

  • замена «» (пробел), в названии с «_» , а также в названиях файлов их содержимое
  • повторно пронестись их обратно

Застрял в распаковке, потому что „$ (имя_директории„$ 0“)/$ (базовый„$ 0“)“ кидают ошибку.

Более длинный desc. Иерархия
Файл:

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 & море/dugi_otok/970x250/SS4_970x250.zip
~> Внимание: имя файла не соответствует: ./sun & море/dugi_otok/970x250/SS4_970x250.zip

Для жизни меня я не могу понять этого.

Re перспективе удалить пробелы
Если я получить эту работу и файлы будут распакованы, план повторно запустить команду mv из каталога верхнего уровня banners/ и снова заменить пробелы с «_» снова , Это касается содержимого .zip-файлов.

Re-зип
Наконец, мне нужно повторно сжать эти вновь созданные поддиректории, названные в качестве исходных файлов .zip и перезаписывать существующие файлы .zip (которые изначально были распакованные).

В основном повторно пронестись это:

~> banners/germany/active/dugi_otok/300x250/AC2_xx/(newly unzipped contents) 

в:

~> banners/germany/active/dugi_otok/300x250/AC2_xx.zip 

Извиняюсь за сумбур, но я не мог найти лучший способ объяснить это.

+0

Почему вы добавили тег [baseline]? – Armali

ответ

0

basename не обнажать расширение так что ваши:

"$(dirname "$0")/$(basename "$0")" 

просто воссоздает $0. Заменить на:

"$(dirname "$0")/$(basename -s ".zip" "$0")" 

-s вариант basename полосы суффикс

HTH

0

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

unzip вариант -d подходит для этого:

find . -name "*.zip" -exec sh -c 'unzip "$0" -d "${0%.zip}"' {} \; 

С помощью команды вы пробовали второй аргумент unzip был взят в качестве имени файла, чтобы извлечь из архива, и, конечно, не найдено в нем.