Como listar apenas arquivos JPEG do root abaixo usando a linha de comando?

4

Estou procurando um método para encontrar apenas arquivos JPEG / Com meu conhecimento limitado de Linux, cheguei a este ponto:

  1. liste todos os caminhos que existem da raiz abaixo com find /
  2. canalize o resultado para o próximo comando e execute o comando file em cada caminho encontrado com xargs file
  3. No resultado do comando file é uma string JPEG contida, eu pensei que talvez fosse possível de alguma forma para uma instrução IF filtrar apenas os JPEGs: If (JPEG contido na saída do comando file) {show argument do arquivo}

mais uma vez:

find / | xargs file | "If statement" 

Você poderia, por favor, me corrigir, me dar uma dica de como realizar a tarefa ou dar uma solução?

    
por Abdul Al Hazred 19.02.2015 / 21:11

3 respostas

7

Se quiser listar arquivos que contenham uma imagem JPEG, independentemente da extensão do nome do arquivo, você poderá usar find + file para listar os arquivos com o tipo mime image/jpeg :

find . -type f -exec sh -c '
    file --mime-type "$0" | grep -q image/jpeg\$ && printf "$0\n"
' {} \;

ou

find . -type f -exec sh -c '
    mt=$(file --brief --mime-type "$0")
    [ -z "${mt#image/jpeg}" ] && printf "$0\n"
' {} \;
    
por 19.02.2015 / 23:12
7

Para começar, você pode imprimir arquivos com uma extensão de arquivo .jpg com:

sudo find / -name *.jpg -print

Veja como isso se comporta, modifique para se adequar e você pode enviar a saída para outra função, em vez de apenas imprimi-la, se desejar. Por exemplo, se você quiser permitir também .JPG :

sudo find / -iname "*.jpg"
    
por 19.02.2015 / 21:17
0

Isto irá imprimir os caminhos para todos os arquivos com o tipo mime de image / jpeg .

find / -type f -exec file --no-pad --mime-type {} + 2>/dev/null \
    | awk '$NF == "image/jpeg" {$NF=""; sub(": $", ""); print}'

Algumas coisas a serem observadas:

  • use -exec command {} + em vez de -exec command {} \; para chamar somente file uma vez (em vez de uma vez para cada arquivo)
  • use a opção --no-pad para garantir que a saída de file esteja em um formato consistente (para tornar a análise mais fácil)
  • use 2>/dev/null para suprimir o stderr de find , só é necessário porque a execução do comando de / resultará em vários erros de 'Permissão negada' que confundirão o console
por 22.09.2016 / 07:06