Unix unzip: как пакетно распаковать zip-файлы в папку и сохранить в подпапках?

Скажем, если у меня есть папка images, а внутри нее находятся файлы 0001.zip - 9999.zip, я хочу распаковать их все и сохранить в подпапке с именем файла, например 0001.zip будет распакован и сохранен в / 0001, 0002.zip будет разархивирован и сохранен в / 0002, я пытался сделать

unzip '*.zip'

но при этом извлекаются все файлы в текущей папке.


person hzxu    schedule 03.08.2012    source источник


Ответы (1)


Вы можете сделать что-то вроде этого:

 for file in *.zip; do
       dir=$(basename "$file" .zip) # remove the .zip from the filename
       mkdir "$dir"
       cd "$dir" && unzip ../"$file" && rm ../"$file" # unzip and remove file if successful
       cd ..
  done

или запустите его вместе в одной строке:

  for file in *.zip; do dir=$(basename "$file" .zip); mkdir "$dir"; cd "$dir"; unzip ../"$file" && rm ../"$file"; cd ..; done

Если вам нужно / вы хотите сохранить исходные файлы .zip, просто удалите бит && rm ../"$file".

person BRPocock    schedule 03.08.2012