Рекурсивный разбор нескольких папок

8

У меня есть несколько архивов RAR, распределенных по нескольким каталогам, но все они находятся в определенной корневой папке на моем NAS-устройстве на базе Debian. Может ли кто-нибудь помочь мне написать простой сценарий, который будет рекурсивно входить в каждую папку, разбирать содержимое, возвращаться в родительскую папку и переходить в следующий каталог? Так:

cd Photos/Summer/Italy/
unrar e Italy.rar
wait
cd ../France/
unrar e France.rar
wait
etc...

Так что просто укажите его на корневую папку «Фото», и она будет пролетать сквозь нее, все в пути ...

Например, структура каталогов:

*Photos:
 -Summer
  --Italy
   ---Italy.rar
   ---Italy.r01
   ---Italy.r02
  --France
   ---France.rar
   ---France.r01
   ---France.r02
 -Winter
  --Siberia
   ---Siberia.rar
   ---Siberia.r01
   ---Siberia.r02
  --Canada
   ---Snow.rar
   ---Snow.r01
   ---Snow.r02
Touff
источник

Ответы:

16
find Photos/ -name '*.rar' -execdir unrar e {} \; 
Игнасио Васкес-Абрамс
источник
Блестящий, не знал, что это так просто! Большое спасибо!
Touff
3

unrarимеет встроенную рекурсию с помощью -r Recurse subdirectoriesпереключателя.

unrar x -r <parent directory> Извлекает содержимое всех подкаталогов <parent directory>в каждый подкаталог, сохраняя любую структуру каталогов, которая существует в .rarфайлах. Используйте eвместо, xесли структура каталогов нежелательна.

hmj6jmh
источник
Это позволит извлечь файлы из архива подкаталога в <parent directory>. Он не поместит извлеченные файлы в подкаталог рядом с .rarфайлами. Так что это зависит от того, какой результат желателен. ОП не был конкретным в этом случае. Иногда ваш ответ полезен для меня, но иногда мне нужен findответ.
Клифф
1

Если вы хотите переместить фотографии, сделанные не по назначению, в другое место назначения, просто введите место назначения в конце, например:

find source_dir/ -name '*.rar' -execdir unrar e -o- {} /new/destination_dir/ \;

Деннис
источник