Рекурсивно просматривайте каталоги и извлекайте файлы на один каталог выше CLI

#linux #command-line-interface

#linux #интерфейс командной строки

Вопрос:

В настоящее время я использую это

 unrar e -r *.rar
  

Чтобы извлечь файлы, однако это помещает все в мою корневую папку unraring. Текущая структура

 /HomeFolder
    /Nextlevel
        /RarFolder
            rarfile.rar
  

Я хочу, чтобы результат был

 /HomeFolder
    /Nextlevel
        raroutput.ext
  

Как бы мне изменить свою команду, чтобы сделать это?

Ответ №1:

Попробуйте использовать следующий подход:

 find /HomeFolder -type d -name 'RarFolder' -printf '%hn' | xargs -I{} sh -c 'cd {}; unrar e -r *.rar'
  

Он выполняет поиск по всем вложенным подкаталогам ‘RarFolder’ в ‘/HomeFolder’, выполняя вашу команду unrar из вложенного каталога, содержащего ‘RarFolder’ (т. Е. ‘/HomeFolder / Nextlevel’ в вашем примере).


Для извлечения файлов в родительский каталог одного из них, содержащий файлы ‘*.rar’, команда может быть настроена следующим образом:

 find /HomeFolder -type f -name '*.rar' -printf '%hn' | xargs -I{} sh -c 'cd {}/..; unrar e -r *.rar'
  

Комментарии:

1. Rarfolder — это просто пример, NextLevel и Rarfolder имеют неизвестные имена. Мне просто нужно, чтобы все rar-файлы были извлечены на 1 каталог выше, где находится файл rar

2. @BrianJ Я скорректировал свой ответ для этого случая