29Jun
Quando você está tentando trabalhar na alteração do design do seu site, você deve se preocupar com a largura das imagens no conteúdo do artigo. Eu tenho screenshots notoriamente grandes na maioria dos artigos que escrevi, então, se eu quiser aumentar a barra lateral, é fundamental descobrir quais fotos serão muito amplas para se ajustarem ao novo design.
Desde que sou programador, seria fácil escrever uma pequena aplicação para fazer isso, mas isso me fez começar a pensar. .. por que não posso fazer isso na linha de comando do Linux?
A primeira coisa que descobri foi que as imagens PNG exibem os dados de tamanho quando você executa o comando "arquivo" neles:
$ file image3.png
image3.png: dados de imagem PNG, 613 x 657, 8 bits / corRGBA, não entrelaçado
Muito útil, pois 99% da imagem neste site está no formato PNG.Então, agora para jogá-lo em um loop para todos os arquivos no meu diretório de upload:
$ para f em *. png; arquivo $ f; feito
image.png: dados de imagem PNG, 631 x 185, 8 bits / corRGBA,
não entrelaçado image1.png: dados de imagem PNG, 631 x 96, RGBA de 8 bits / cor,
não entrelaçado image10.png: dados de imagem PNG, 375 x 395, RGBA de 8 bits / cor,entrelaçado
image11.png: dados de imagem PNG, 484 x 241, RGBA de 8 bits / cor,
não entrelaçado -
Isso é mais útil, mas eu teria que puxar os dados para o Excel ou um aplicativo semelhante emordem para ordenar os dados, então eu decidi usar o comando "corte" do linux para retirar apenas a coluna de largura.
Você notará que o parâmetro -f5 diz cortar para tomar a quinta coluna, e o -d \ com um espaço depois que ele diz cortar para usar um espaço como o delimitador. O caractere slash \ é um caractere de escape para dizer ao shell para usar o espaço como um personagem e não como espaço em branco.
$ para f em *. png; arquivo $ f | cut -f5 -d \; feito
631
631
375
484
-sençado-
Saída não inteiramente útil, não é?Vamos empurrar isso através de uma instrução if bash e, em seguida, mostre apenas a saída do comando do arquivo quando a largura for maior que 600 pixels.
Observe as marcas `(backtick) em torno do" arquivo $ f |corte. .. ", que indica que os comandos dentro do` serão processados como uma saída única e alimentados na instrução if, onde usamos um -gt( maior que).Observe também que você precisa de espaços em qualquer lado dos colchetes []
para f em *. png; faça se [`file $ f |corte -f5 -d \ `-gt 600];então arquivo $ f; fi; feito
image.png: dados de imagem PNG, 631 x 185, RGBA de 8 bits / cor,
não entrelaçado image1.png: dados de imagem PNG, 631 x 96, RGBA de 8 bits / cor,
não entrelaçado image17.png: dados de imagem PNG, 638 x 340, RGBA de 8 bits / cor,
não entrelaçado image18.png: dados de imagem PNG, 608 x 448, RGBA de 8 bits / cor, não entrelaçados
- simplificado -
Agora, temos uma lista de todos os arquivos com mais de 600 pixels de largura. Você poderia ajustar o "arquivo $ f" no final para apenas ecoar os nomes dos arquivos se você precisasse copiar ou movê-los em outro lugar:
para f em *. png; faça se [`file $ f |corte -f5 -d \ `-gt 600];então echo $ f; fi; feito
image.png
image1.png
image17.png
image18.png
- simplificado-
O shell Linux é incrivelmente poderoso! Esta solução não é realmente prática para todos, mas é bom saber como trabalhar com o shell para que você possa realizar esse tipo de tarefa quando precisar.