Desafio - minha resposta. Como apaguei os arquivos de fotos não usadas.


Veja só o problema que tive ao preparar a palestra:

Tirei um monte de fotos e depois preparei diversas páginas HTML usando apenas algumas fotos.

Para economizar disco eu quiz remover todas as fotos que não foram usadas nas páginas HTML.

Como eu resolvi o problema?

Todas os arquivos de fotos eram do tipo D*.JPG. Se você usar algum comando como:

grep JPG *.html >lixo

Já vai coletar todas as linhas dos arquivos html que incluem a string "JPG". Exemplo real de algumas linhas de lixo:


edit.html:<a href="DCP00683.JPG"> </a> hw.html:<a href="DCP00660.JPG">winchester</a></li> hw.html:<blockquote><a href="DCP00634.JPG">DCP00634.JPG</a>
Observe: posso ter arquivos .JPG repetidos e mais de um numa mesma linha.

Depois é necessário trabalhar com o arquivo "lixo" para extrair os "D*.JPG" e gerar os comandos.

Como fazer isso?

Eu coloquei todas as fotos em um diretório reservado e resolvi copiar para um outro diretório somente as fotos que eram referenciadas pelas páginas HTML.

Eu fiz o seguinte: criei um script Perl que gerou um outro script para o bash contendo comandos copy.

O script Perl "tirafoto.pl" :


# coleta o nome das fotos que uso. while (<>) { if (/D\w+\.JPG/) { $fotos{$&} = 1; } foreach $a (keys %fotos) { print "cp $a ../ \n";

Uso do script Perl:


perl tirafoto.pl lixo >movefoto

Veja o começo do arquivo movefoto.

$ more movefoto cp DCP00634.JPG ../ cp DCP00670.JPG ../ cp DCP00590.JPG ../ cp DCP00671.JPG ../ cp DCP00591.JPG ../ cp DCP00672.JPG ../ cp DCP00592.JPG ../ cp DCP00673.JPG ../ cp DCP00593.JPG ../ cp DCP00674.JPG ../

Agora é só executar este arquivo com um comando como:

$ bash movefoto Espero que você possa ter entendido. A maior dificuldade está em se entender o Perl. Se você programa em outras linguagens e quer ter uma idéia do Perl veja o material da palestra que fiz na Sucessu em: http://www.pcs.usp.br/~jkinoshi/sucperl.html .

Se você tiver uma outra resposta para o desafio (infelizmente não recebi nenhuma) mande para mim. Conforme for, estarei publicando também a sua resposta.


Para assinar ou abandonar o ViaLinuxis: http://www.pcs.usp.br/~jkinoshi/boletim.html
colocado em: 18 - 4 - 00

^JC