Como remover todas as partes de um arquivo RAR dividido usando a linha de comando?

6

Geralmente, eu uso uma distribuição Linux baseada em Debian de algum tipo; Debian 7.8 ou Linux Mint 17. Eu tenho um arquivo RAR dividido assim:

filename.rar
filename.r01
filename.r02
filename.r03
etc ...

Tendo extraído o arquivo usando dtrx ou unrar , gostaria de excluir todos os arquivos de peças do arquivo dividido usando, de preferência, uma única linha.

No momento eu faço rm filename.r* , que em geral funciona bem, no entanto, se os arquivos tiverem nome como rabbid.ranger.robot.r01 , ele também poderá excluir o diretório rabbid.ranger.robot extraído.

Então, estou procurando algo um pouco mais robusto.

Também aceitará um script curto.

    
por fswings 06.04.2015 / 01:53

3 respostas

6

Dependendo do número de arquivos .r0* que você tem, você pode substituir o * por ? , isso removerá arquivos que tenham .r0 e 1 outro caractere. Por isso, removerá rabbid.ranger.robot.r01 , mas não rabbid.ranger.robot.r010 Geralmente eu usaria como tal:

rm filename.r??
    
por 06.04.2015 / 02:23
10

Suponha que você tenha um RAR dividido com partes numeradas até 12 (ou seja, filename.r12 como seu último arquivo) e deseja ser mais cuidadoso para não remover nenhum outros arquivos. Assumindo que bash é o seu shell e você está usando a versão 4 ou superior ( bash --version para verificar), você pode crie uma lista explícita de arquivos facilmente com a expansão de chaves :

rm filename.rar filename.r{01..12}

Isso removerá somente esses arquivos: até mesmo arquivos chamados filename.rtf (ou filename.r13 ) serão poupados. Dependendo de quais outros arquivos você tem (ou pode ter) na pasta, isso pode ou não ser preferível a geralmente bom .r?? maneira sugerida por Devan .

A expansão de chave, incluindo intervalos numéricos, é um recurso muito antigo de vários shells. Mas antes da versão 4, o bash não suportava preenchimento com zero (ou seja, você deseja nomes como filename.r05 , não filename.r5 ).

Você pode verificar primeiro em quais nomes de arquivo uma expressão de chave será expandida para:

$ echo filename.rar filename.r{01..12}
filename.rar filename.r01 filename.r02 filename.r03 filename.r04 filename.r05 filename.r06 filename.r07 filename.r08 filename.r09 filename.r10 filename.r11 filename.r12

(Você também pode verificar expressões com * ou ? dessa maneira - lembre-se de que o que é expandido depende de qual pasta você está quando executa o comando.)

    
por 06.04.2015 / 05:03
4

Você pode usar o comando find ; do diretório de trabalho:

find . -type f -name "filename.*" -exec rm  {} \;

Isso procura apenas os arquivos correspondentes, os diretórios são excluídos. Pode ser uma boa ideia primeiro testar o comando com ls em vez de rm para garantir que ele esteja retornando os resultados desejados.

find . -type f -name "filename.*" -exec ls {} \;
    
por 06.04.2015 / 02:17