У меня есть много zip-файлов a.zip, b.zip, c.zip... и я хочу извлечь каждого из них в новые папки a, b, c... соответственно, через терминал.
На самом деле то, что я хочу, является решением, которое я могу использовать позже с a find
потому что у меня на самом деле есть много папок 2014, 2013, 2012... каждый из них содержащий много zip-файлов a.zip, b.zip, и т.д. Если я делаю find . -name "*.zip" -exec {} unzip \;
это разархивирует все файлы и поместит их в их соответствующую родительскую папку.
Необходимо смочь использовать неzip -d
опция установить альтернативный каталог для содержания архива.
unzip -d a a.zip
unzip -d b b.zip
и так далее. В a find
выражение, необходимо смочь получить название каталога с названия zipfile, использующего расширение параметра оболочки, например.
find -name '*.zip' -exec sh -c 'unzip -d "${1%.*}" "$1"' _ {} \;
Протестируйте его сначала путем добавления echo
т.е.
find -name '*.zip' -exec sh -c 'echo unzip -d "${1%.*}" "$1"' _ {} \;
или что-то как
while read -rd $'\0' f; do
unzip -d "${f%.*}" "$f"
done < <(find -name '*.zip' -print0)
Я приехал, ища это сам, только чтобы понять, что я уже сделал это с другими командами, и к этому можно было относиться примерно что-либо еще, способ, которым я уже делал его.
метод находки сумасшедший сверхсложный ни по какой причине.
for i in *.zip; do unzip "$i" -d "${i%%.zip}"; done
Просто Использование
unzip '*.zip' -d /home/user/folder/
Я также должен был сделать это использование unrar. Это может быть достигнуто незначительной модификацией к коду kencinder.
for i in *.rar; do mkdir "${i%%.rar}"; unrar x -r "$i" "${i%%.rar}"; done
PS: Я хотел добавить это как комментарий, но у меня нет достаточного количества точек репутации!