1

Короче говоря, я не уверен, что делаю неправильно, но в основном я хочу сделать цикл по всем файлам zip и распаковать их содержимое для каталога с именем zip.

пример:

Файлы: a.zip , b.zip

команда

for i in `ls *.zip`; do unzip $i -d  `echo $i | cut -f1 -d'.'` ; done

Ожидаемый результат:

Папка a с содержимым a.zip папка b с содержимым b.zip

Что происходит:

Zip-файлы не найдены. распаковать: не может найти или открыть a.zip, a.zip.zip или a.zip.ZIP.

Любой совет, что может быть не так?

3 ответа3

1

Это должно работать:

for i in *.zip; do
newdir="${i:0:-4}" && mkdir "$newdir"
unzip "$i" -d  "$newdir"
done
1

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

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

Использовать этот:

for i in `find | grep .zip$`;do unzip $i;done

РЕДАКТИРОВАТЬ

Предыдущий ответ неверен (;

for i in `find | grep .zip$ | sed 's@.zip$@@'`;do mkdir $i;unzip $i.zip -d $i;done

Попробуй это!

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .