for file in *.7z; do
directory=${file/%.7z/}
if mkdir ${directory}; then
( cd ${directory}; 7z x ../${file} )
else
echo "Unable to create directory ${directory} for archive ${file}" 1>&2
fi
done
Для этого сначала нужно перебрать все файлы *.7z используя переменную file . Как только он захватывает имя файла, он использует манипуляции со строкой bash, чтобы .7z с конца и сделать из этого новую переменную, directory .
Затем он попытается создать каталог и, если сможет, откроет подоболочку, зайдет в этот каталог и распакует архив 7zip.
Если не удалось создать этот каталог, сообщение отправляется со стандартной ошибкой.
Я использую подоболочку, чтобы не беспокоиться о том, что я могу потерять отслеживание изменений в рабочем каталоге.
Самая сложная часть этой строки:
Каталог = $ {файл /%. 7z /}
Это вышеупомянутое манипулирование строкой bash, которое будет искать .7z в конце строки и, если присутствует, заменять ее ничем. Если бы я захотел заменить его, скажем, на .zip , я мог бы использовать ${file/%.7z/.zip} .