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

У меня есть каталог, полный zip файлов. Каждый из них называется "files1.zip". Мой инстинкт заключается в использовании цикла bash for для распаковки каждого файла.

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

Я хотел бы убедиться, что "files1.zip" выливает все его файлы в директорию с именем "files1" и т.д.

В качестве дополнительного осложнения некоторые имена файлов имеют пробелы.

Как я могу это сделать?

Спасибо.

Ответ 1

for f in *.zip; do
  dir=${f%.zip}

  unzip -d "./$dir" "./$f"
done

Ответ 2

Простой один вкладыш

$ for file in `ls *.zip`; do unzip $file -d `echo $file | cut -d . -f 1`; done

Ответ 3

вы можете использовать -d для распаковки в другой каталог.

for file in `echo *.zip`; do
    [[ $file =~ ^(.*)\.zip$ ]]
    unzip -d ${BASH_REMATCH[1]} $file
done