Recursivamente extrai arquivos rar

0

Eu tive um pequeno problema ao extrair arquivos RAR recursivamente. Estou usando esta linha find . -name '*.rar' -exec unrar e {} \; -exec rm {} \; && rm *.r* e parece funcionar! Mas o problema é que os arquivos que estão sendo extraídos acabam na pasta de trabalho atual. Quando eu quero que eles sejam extraídos na pasta onde eles estão.

Este é um exemplo da estrutura de arquivos, duas pastas, Holdiday_pictures_greece e Holdiday_pictures_malta. Eles contêm arquivos rar (ou arquivos rar). Holdiday_pictures_greece.rar e o arquivo correspondente Holdiday_pictures_greece.r01 Holdiday_pictures_greece.r02 e assim por diante.

~$ 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

Como você pode ver no meu exemplo acima, todos os arquivos de ambos os arquivos (Malta e Grécia) acabam no diretório ~ , se eu executei o script. O resultado esperado seria que eles acabaram na respectiva pasta, Holdiday_pictures_malta e Holdiday_pictures_greece. Também pode haver subpastas nas pastas. Exemplo Holdiday_pictures_greece/2011 contendo mais arquivos rar.

Eu tentei com -execdir, mesmo resultado, os arquivos acabam no diretório atual.

Assim, o resultado esperado seria percorrer todas as subpastas dentro do diretório atual, extrair os arquivos rar na pasta em que foram encontrados e, em seguida, excluir o arquivo rar.

    
por Adam 11.05.2017 / 15:31

1 resposta

1

Isso provavelmente é mais simples de fazer com um loop while em vez de -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
    
por terdon 11.05.2017 / 16:45