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}
.