Isso encontra imagens malformadas e armazena seus nomes em names.txt :
find -name '*.jpg' -exec bash -c 'identify "$1" &>/dev/null || echo "$1">>names.txt' none {} \;
Como funciona
-
find -name '*.jpg'Isso inicia
findcomo de costume. -
-exec bash -c 'identify "$1" &>/dev/null || echo "$1" >>names.txt' none {} \;Isso executa
identifyem cada arquivo e, seidentifyretornar um código de erro diferente de zero, o nome do arquivo será exibido emnames.txt.bash -c '...' none {}faz com que um shell bash execute o comando nas aspas com o nome do arquivo em{}atribuído ao argumento posicional$1.Para os curiosos, a string
noneé atribuída a$0.$0não é usado a menos que bash gere um erro, caso em que ele aparecerá na mensagem de erro como nome do programa .
Discussão
I tried adding
|| echo "%f" >> errors.txtto the -exec portion, but that didn't work. What would be the best way to do this?
A sutileza é que || precisa operar no comando identify . Para fazer isso, precisamos colocar identify em um shell, usando bash -c como mostrado acima.