Como encontrar arquivos rar de várias partes, extraí-los em seus diretórios e removê-los se tudo for bem sucedido

0

Tenho centenas de pastas com arquivos de várias partes dentro delas.

-FOLDER.1
    file.rar
    file.r00
    file.r01
    file.r02
-FOLDER.2
    file.rar
    file.r00
    file.r01

Estou usando o código abaixo para extraí-los dentro de suas respectivas pastas e removê-los após a extração bem-sucedida,

flock -n locked -c "find . -name '*.rar' -execdir unrar e -o- {} \; -execdir rm {} \; && find . -name '*.r[:0-9:][:0-9:]' -exec rm {} \;"

O problema é se algo der errado, digamos;

  • Uma das partes do arquivo está corrompida,
  • Os arquivos ainda não foram enviados

Esse script exclui as várias partes mesmo que a extração não seja bem-sucedida. Como pode melhorar este script para que ele exclua arquivos e partes rar se a extração for bem-sucedida. Eu gasto toda a minha manhã para descobrir isso, mas até agora não tenho sucesso.

    
por user611811 08.02.2018 / 16:50

1 resposta

0

Os comandos rm devem ser dependentes do resultado do comando unrar , no qual, no seu exemplo, todos eles são executados seqüencialmente, aconteça o que acontecer.

Então, tente algo assim (em um diretório de teste primeiro!):

flock -n locked -c "find . -name '*.rar' -print0 | xargs -0 -I FILE sh -c \"unrar e -o- FILE && rm FILE 'basename FILE .rar'.r[:digit:][:digit:]\" "

Em seguida, a parte rm é executada apenas se o comando unrar for concluído com êxito.

Você precisará de cotações extras se os nomes dos arquivos tiverem espaços.

    
por 08.02.2018 / 17:47

Tags