Я понял, что для извлечения .zip
вам нужен путь к каталогу, когда вы рекурсивно просматриваете подкаталоги. Так как вы храните путь? Это почти там, но не работает должным образом, когда есть пробел в {zip_file}
.
zip_dir=$PWD/$(basename "${zip_file}")
Я создал это из Вашего другого вопроса также. Это взяло меня немного, но это - то, что я смог придумать для создания папок на основе названия zip-файла, удалив .zip
с имени папки, затем извлекая zip-файл в ту папку.
#!/bin/bash echo "Start folder create..." find . -type f -iname "*.zip" | while read filename do filename1=${filename:2} foldername=$PWD/"${filename1%.*}" mkdir -p "$foldername" unzip "$filename" -d "$foldername" echo "Created directory $foldername and extracted files to it." done
строка filename1=${filename:2}
снимает изоляцию ./
из имени.
Редактирование: Я, должно быть, не протестировал это правильно.
Обычно Вам не нужны кавычки при делании уроки, как раз в то самое время, когда разыменование переменной. При создании присвоения Вы не должны помещать кавычки вокруг разыменовываемой переменной, но так как разыменование происходит в оболочке sub, кавычки необходимы вокруг ${zip_file}
часть так, чтобы это было значение, правильно передается базовому имени. Кавычки НЕ на самом деле необходимы вокруг всей строки, потому что тогда она вернулась в контексте переменного присвоения, где кавычки не необходимы, поскольку удар сделает правильную вещь с передачей значения от подоболочки до строки присвоения.
Благодарен за то, что @janos указывает на это. Я не уверен, что я завинтил в тестировании исходной строки, которая взяла меня вниз путь чрезмерных кавычек. Вы корректны, следующее прекрасно:
zip_dir=$PWD/$(basename "${zip_file}")