Рекурсивно извлеките 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. В папках могут также быть sub папки. Пример Holdiday_pictures_greece/2011 содержа больше rar файлов.

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

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

0
задан 11 May 2017 в 07: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
ответ дан 3 November 2019 в 06:39

человек unrar:

НЕБЕСПЛАТНОЕ СОВМЕСТИМОЕ РЕЗЮМЕ UNRAR, unrar-бесплатное [elvx] [-ep] [-o +] [-o-] [-ppassword] [-u] [-] AR ‐ ШНИТТ-ЛУК [ФАЙЛ...] [МЕСТО НАЗНАЧЕНИЯ]

   This syntax should only be used in front-end programs which  are  using
   non-free  unrar as a back-end. It is recommended to use this program by
   GNU command line syntax.

   e         Extract files from archive without full path.

   l         List files in archive.

   v         Verbose list files in archive.

x: Файлы извлечения из архива с полным путем.

0
ответ дан 3 November 2019 в 06:39

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

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