Use apenas find
com -exec
:
find . -name '*bz2' -exec sh -c 'bzip2 -t "$0" 2>/dev/null || echo "$0 is corrupted"' {} \;
De man find
:
-exec command ;
Execute command; true if 0 status is returned. All following
arguments to find are taken to be arguments to the command until
an argument consisting of ';' is encountered. The string '{}'
is replaced by the current file name being processed everywhere
it occurs in the arguments to the command [...]
Portanto, o comando find
acima, procurará todos os arquivos terminados em bz2
e iniciará um pequeno script sh
em cada um deles. O {}
é substituído por cada nome de arquivo encontrado. Isso é passado como o primeiro parâmetro ( $0
) para o script sh
, que executará bzip -t
e reclamará se falhar. O 2>/dev/null
descarta qualquer outra mensagem de erro para manter as coisas limpas.
Como alternativa, você pode usar o shell. Se você estiver usando bash
, ative a opção globstar
para tornar **
recurse em subdiretórios e verifique cada arquivo bzip:
shopt -s globstar
for file in folder/**/*bz; do bzip2 -t "$file" || echo "$file is corrupted"; done