Como executar um comando em todos os arquivos de tipos particulares em um sistema de arquivos?

2

Acabei de recuperar vários arquivos (distribuídos em uma estrutura de diretórios complexa, com nomes muito longos, usando símbolos Unicode, espaços, etc. em nomes) de um disco rígido danificado. Agora eu gostaria de verificar todos os arquivos que contêm informações de verificação (como arquivos zip (incluindo o LibreOffice e outros documentos tipo XML-in-ZIP), arquivos 7z e rar, arquivos exe autoextraíveis etc.)

Como posso conseguir isso?

    
por Ivan 06.09.2012 / 00:17

1 resposta

2

Para localizar arquivos por nome:

find /mount/point -type f \( \
    \( -name '*.zip' -o -name '*.o[dt][bcfghipst]' \) -exec unzip -t {} \; \
    -o -name '*.7z' -exec 7z t {} \; \
    …   \)

find /mount/point -type f \( -name '*.7z' -o -name '*.o[dt][bcfghipst]' \) -exec unzip -t {} \;

Para localizar arquivos por tipo:

find /mount/point -type f -exec sh -c '
  case "$(file --mime-type -b - <"$0")" in
    application/zip) unzip -t "$0";;
    application/x-7z-compressed) 7z t "$0";;
    application/rar) unrar t "$0";;
    …
  esac
' {} \;
    
por 06.09.2012 / 03:46