Pensei no seguinte teste para determinar se o arquivo é imagem ou não: $ if [[ $(file --mime-type arquivo.jpg) =~ 'image' ]]; then echo 'É Imagem'; fi
Para resolver seu problema, só colocar esse teste num laço iterando sobre os arquivos e caso seja imagem, mover o arquivo. Não sei se é a melhor abordagem, mas como você disse que perguntou para aprender maneiras novas de fazer as coisas fica minha sugestão de usar o operador =~ disponível no bash a partir da versão 3. Pode ser que não seja novidade para você mas já vi muita gente usando comandos externos desnecessariamente por desconhecer o =~. Saudações, Guilherme Magalhães Gall (GMGall) GPG Public Key ID: 0F498058 Em 26 de abril de 2010 00:02, Helton Moraes <[email protected]> escreveu: > Caros colegas > > Tenho pastas baixadas com o wget que contêm galerias de wallpapers mas junto > vêm documentos html, css, scripts, etc. Pretendo criar um script que remova > de dentro de uma pasta e seus subdiretórios todos os arquivos que não forem > JPEG. > Inicialmente usei um comando com expressão regular que pegasse o que não > terminava com .jpeg ou .jpg, mas como às vezes a extensão do arquivo vinha > com problema, ou nem vinha, eu ia lá na lixeira temporária que criei para o > script, e via arquivos com extensão deformada, mas que o Nautilus dizia > serem "imagens jpeg", e de fato eram. > > Assim sendo, estou usando o comando 'mimetype', que mostra o formato MIME > dos arquivos, da seguinte forma: > > $ mimetype -b `find ./ -type f` | sed /^$/d # o sed é só pra tirar as > linhas em branco > > O resultado é do tipo: (obs: aqui os arquivos não estão identificados, é só > pra dar idéia do tipo de saída do comando, cada linha é um arquivo > encontrado) > > image/gif > image/jpeg > image/jpeg > image/jpeg > image/jpeg > image/jpeg > image/jpeg > image/jpeg > image/jpeg > application/x-php > application/x-trash > text/html > text/html > text/html > application/x-trash > application/x-trash > image/jpeg > image/jpeg > image/jpeg > image/jpeg > > ENTÃO, a idéia seria usar a saída desse comando dentro de um laço: se a > condição é preenchida, move o arquivo, se não, nada acontece. > Outra possibilidade seria dar um mv em todos os arquivos de uma vez só, > depois de ter criado uma lista, mas acho que teria que usar loop de qq > jeito. > > Imagino que isso seja meio banal, e que eu conseguiria resolver sozinho, mas > mantendo o costume de procurar boas práticas entre os colegas mais > experientes, pergunto: > > Alguma sugestão de estratégia/comandos para utilizar? > > > > Grato pela atenção > > Helton moraes > > > [As partes desta mensagem que não continham texto foram removidas] > > > > ------------------------------------ > > --------------------------------------------------------------------- > Esta lista não admite a abordagem de outras liguagens de programação, como > perl, C etc. Quem insistir em não seguir esta regra será moderado sem prévio > aviso. > --------------------------------------------------------------------- > Sair da lista: [email protected] > --------------------------------------------------------------------- > Esta lista é moderada de acordo com o previsto em > http://www.listas-discussao.cjb.net > --------------------------------------------------------------------- > Servidor Newsgroup da lista: news.gmane.org > Grupo: gmane.org.user-groups.programming.shell.brazil > > Links do Yahoo! Grupos > > >
