Como analisar a saída para ver se uma string corresponde?

1

Desafio: Eu preciso analisar a saída do comando "identify" do imagemagick para detectar a presença de uma string específica. Se não existe, então eu faço o eco do nome do arquivo para a tela.

Histórico: Eu tenho aproximadamente 100k imagens em miniatura ( Exemplo de miniatura que precisa ser analisado ). Preciso inspecionar cada miniatura para garantir que ela foi processada corretamente. Felizmente, "renderizado corretamente" pode ser determinado pela presença de pixels vermelhos na miniatura. Usando o comando "identify" do imagemagick, posso produzir o mapa de cores que conterá a linha "(255, 0, 0) # FF0000 vermelho".

Necessidade: Usando um script bash, posso facilmente obter todos os nomes de arquivos e iterar através deles. Eu preciso descobrir como silenciosamente analisar a saída e procurar por uma correspondência de seqüência de caracteres e ecoar o nome do arquivo se não for encontrado.

Especificamente, o que eu quero fazer é criar um script que faça o seguinte:

1) encontra todos os arquivos * .png em um determinado diretório.

2) para cada arquivo, execute "identify -verbose" e silenciosamente passe a saída para ...

3) analise a saída para ver se a string "(255, 0, 0) # FF0000 red" existe.

3a) se isso acontecer, continuo em silêncio para o próximo arquivo.

3b) se isso não acontecer, faço eco do nome do arquivo.

Por fim, ficaria com uma pequena lista de miniaturas que não contêm pixels vermelhos e exigem inspeção manual.

Qualquer ajuda para criar este script seria mais apreciada.

    
por sstringer 10.10.2015 / 16:01

1 resposta

0

Para encontrar arquivos que não tenham pixels vermelhos:

for i in *png; do identify -verbose "$i" | gawk -e "{print \"$i\", \
for i in *png; do identify -verbose "$i" | gawk -e "{print \"$i\", \
for i in *png; do identify -verbose "$i" | gawk -e "{print \"$i\", \
for i in *png; do identify -verbose "$i" | gawk -e "{print \"$i\", \%pre%}" | fgrep -q '(255,  0,  0) #FF0000 red' && echo $i; done
}" | fgrep -q '(255, 0, 0) #FF0000 red' || echo $i; done
}" | fgrep -q '(255, 0, 0) #FF0000 red' && echo $i; done
}" | fgrep -q '(255, 0, 0) #FF0000 red' || echo $i; done

Para encontrar arquivos com pixels vermelhos:

%pre%

O comando gawk adiciona o nome do arquivo a cada linha de saída do comando identificador. Usar o fgrep em vez do grep apenas procura por correspondências exatas de texto (mais rápido). O sinalizador -q para fgrep diz para não gerar nenhuma linha; apenas para definir o status como sucesso ou falha.

O script deve ser seguro para nomes de arquivos que contenham espaços.

    
por 10.10.2015 / 17:22