Como encontrar todos os arquivos JPG no sistema de arquivos quando a extensão .jpg não é obrigatória? [duplicado]

7

A primeira coisa que notei quando mudou do Windows para o Linux foi que o Linux não tem nenhuma convenção de nomenclatura e nenhuma extensão de nome de arquivo obrigatória como .bmp, .jpg, .exe etc. Portanto, não posso dizer pelo próprio nome do arquivo formato de arquivo.

Se todos os arquivos JPEG no meu sistema de arquivos tivessem a extensão .jpg, eu poderia simplesmente encontrar todos os arquivos JPEG por:

find / -type f -name "*.jpg"

Mas, se não for o caso, não sei como encontrar todos os arquivos JPEG.

    
por Abdul Al Hazred 25.03.2015 / 20:39

1 resposta

15

Se você deseja rastrear em diretórios e subdiretórios:

find /home/place/to/crawl -type f -exec file --mime-type {}  \; | awk '{if ($NF == "image/jpeg") print $0 }'

O que isso faz?

  • Pesquise todos os inodes com o tipo file
  • Execute o arquivo de comando, para obter um cabeçalho jpeg do arquivo como: image/jpeg
  • awk

Editar : Adicionada a dica @Franklin, para usar o arquivo com -i para usar o padrão de string mime ao gerar tipos de arquivos. Isso reduzirá os falsos positivos da palavra jpeg.

Edit2 : adicionada a dica @don_crissti. Filtrando agora apenas a última coluna com awk e imprimindo toda a linha se corresponder a image/jpeg . Alterou a opção file para --mime-type para suprimir as informações do conjunto de caracteres

    
por 25.03.2015 / 20:47