Рекурсивно извлекать файлы rar

У меня возникла небольшая проблема при извлечении rar-файлов рекурсивно. Я использую эту строку find . -name '*.rar' -exec unrar e {} \; -exec rm {} \; && rm *.r* и, похоже, работает! Но проблема в том, что файлы, которые извлекаются, попадают в текущую рабочую папку. Когда я хочу, чтобы они были извлечены в папке, они были.

Это пример структуры файла, двух папок, Holdiday_pictures_greece и Holdiday_pictures_malta. Они содержат файлы rar (или rar-архивы). Holdiday_pictures_greece.rar и соответствующий архив Holdiday_pictures_greece.r01 Holdiday_pictures_greece.r02 и т. Д.

~$ ls Holdiday_pictures_greece Holdiday_pictures_malta ~$ cd Holdiday_pictures_greece Holdiday_pictures_greece $ ls Holdiday_pictures_greece.rar Holdiday_pictures_greece.r01 Holdiday_pictures_greece.r02 Holdiday_pictures_greece $ cd .. ~ $ find . -name '*.rar' -exec unrar e {} \; -exec rm {} \; && rm *.r* ~ $ ls greece_01.jpg greece_02.jpg malta_01.jpg malta_02.jpg

Как вы можете видеть из моего примера выше, все файлы из обоих архивов (Мальта и Греция) попадают в ~, я запускал скрипт. Ожидаемый результат будет заключаться в том, что они попали в соответствующую папку Holdiday_pictures_malta и Holdiday_pictures_greece. В папках также могут быть подпапки. Пример Holdiday_pictures_greece/2011, содержащий больше rar-файлов.

Я попытался с -execdir, тот же результат, файлы в конечном итоге находятся в текущем каталоге.

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

0
задан 11 May 2017 в 17:34

2 ответа

Это, вероятно, проще сделать с циклом while вместо -exec:

find . -type f -name -name '*.rar' -print0 | while IFS= read -r -d '' file; do dir=$(dirname "$file") rar=$(basename "$file") cd "$dir" unrar -e "$rar" && rm "$rar" cd - done
1
ответ дан 18 July 2018 в 13:29

Это, вероятно, проще сделать с циклом while вместо -exec:

find . -type f -name -name '*.rar' -print0 | while IFS= read -r -d '' file; do dir=$(dirname "$file") rar=$(basename "$file") cd "$dir" unrar -e "$rar" && rm "$rar" cd - done
1
ответ дан 24 July 2018 в 20:11

Другие вопросы по тегам:

Похожие вопросы: