Como escrevo um script para otimizar automaticamente todos os PNGs no meu diretório de imagens do MediaWiki?

4

Eu tenho o MediaWiki 1.25.2 instalado em minha máquina VirtualBox de 64 bits do Debian 8.1 e gostaria de poder fazer o upload do diretório images/ desta instalação para o meu DropBox. Sendo um pão-duro estou tentando minimizar o tamanho deste diretório de imagens, otimizando os PNGs encontrados com optipng , para que eu não acabe com um DropBox tão cheio que eu precise pagar por mais armazenamento. Meu Wiki tem no momento 182 PNGs que eu enviei para ele (junto com mais de uma centena de outras que são miniaturas desses PNGs originais e dos SVGs que eu tenho no meu Wiki), então executando optipng -o7 <filename> em cada um desses arquivos manualmente será muito tedioso.

Por isso estou aqui perguntando, como eu poderia escrever um script bash que irá automaticamente fazer isso por mim. Agora eu sei algumas partes do quebra-cabeça de como fazer isso, como eu sei que o programa find pode gerar listas de arquivos com uma extensão de arquivo especificada em um local especificado (por exemplo, executando sudo find . -type f -name "*.png" do diretório images/ que para mim está em /var/lib/mediawiki/images irá listar todos os PNGs nele), mas eu não sei como usar este programa para criar um arquivo de texto contendo todos os nomes de arquivos relativos a este diretório (por exemplo, f/f1/Frugalware_Linux_screenshot.png ). Eu também não sei como obter optipng para otimizar PNGs listados em um arquivo de texto.

    
por Brenton Horne 14.08.2015 / 10:05

2 respostas

3

Tente:

for i in 'find . -type f -name "*.png"'
do
  optipng -o7 "$i"
done

Não testei, mas deve funcionar assim. Se você precisar testá-lo, altere a linha optipng -o7 $i com echo $i para ver se obteve o arquivo correto.

    
por 14.08.2015 / 10:11
4

simplesmente use find aqui:

find (...your filters ...) -exec optipng -o7 '{}' +

observe que + tentará usar o máximo de find de resultados como argumento para optipng , o que é bom, pois esse programa aceita vários arquivos como argumentos. Observe que + só funciona se for o último argumento para um comando -exec . A alternativa

find (...filters...) -exec optipng -o7 '{}' \;

Executa optipng uma vez por resultado e, portanto, é muito mais lento.

Nota lateral: {} in find representa o resultado do nome do arquivo da sua pesquisa, -exec permitirá a ececução de um comando.

    
por 14.08.2015 / 10:09