Localiza arquivos correspondentes ao tipo MIME em um diretório recursivamente via linha de comando

2

Desejo obter uma lista de todos os arquivos em uma pasta de projeto [recursivamente] que são arquivos de imagem. Infelizmente o Google não pôde me ajudar aqui.

Se possível, o uso de mimetypes do sistema atual é o preferido, por exemplo, todos os arquivos que possuem um mime correspondente ao glob image/* ; para que qualquer exemplo possa ser facilmente estendido para video/* , etc.

Além disso, os comandos que não precisam executar operações caras em todos os arquivos do diretório inteiro são preferidos, já que eu posso estar tentando usar isso em alguns volumes bastante grandes.

Nota: Um possível trabalho em potencial que considerei é buscar a lista de extensões de arquivo dos dados mimetypes e fazer um find para essas extensões, mas isso é menos preferido devido às extensões de arquivo dos arquivos de destino. querendo localizar pode estar faltando, duplo carregado, etc.

Edit: @KasiyA apontou um thread exemplificando a busca de arquivos por extensão, o que eu considero bastante trivial e não exatamente o que estou procurando; Eu editei o título para refletir que estou procurando especificamente por resultados baseados no tipo MIME.

    
por ThorSummoner 10.09.2014 / 19:43

3 respostas

1

Eu não sou bom em scripts, mas ainda assim ele pode encontrar todos os arquivos recursivamente e exibi-los que são do tipo de imagem usando o tipo MIME de arquivos.

 find . -print0 | while IFS= read -r -d'' f; do 
    file -ib $f | grep "^image/" && echo $f; 
 done
    
por g_p 10.09.2014 / 20:05
1

Isso pode estar próximo:

find . -type f -exec mimetype {} + | awk -F': +' '{ if ( ~ /^image\//) print  }'

A regex sendo correspondida na expressão awk pode ser facilmente estendida.

    
por muru 10.09.2014 / 20:28
1

Supondo que você esteja no 14.04 (usando python3), o pequeno script abaixo lista seus arquivos recursivamente em determinado diretório. Ele identifica o tipo MIME do arquivo pelo comando file , conforme descrito aqui

file --mime-type -b filename

Além disso, você pode estender o script adicionando um comando usando shutil (por exemplo, .move / .copy ) no mesmo nível que o comando print .

Adicionando mimetypes

Para uma pesquisa combinada, você pode adicionar (ou remover) os tipos MIME para pesquisar, adicionando-os ao filetypes -tuplo.

O script

#!/usr/bin/env python3

import os
import subprocess

source_dir = "/path/to/directory"
filetypes = ("image", "video")

for root, dirs, files in os.walk(source_dir):
    for name in files:
        file = root+"/"+name
        ftype = subprocess.check_output(['file', '--mime-type', '-b', file]).decode('utf-8').strip()
        if ftype.split("/")[0] in filetypes:
            print(file)

Como usar

Copie o script em um arquivo vazio, configure o diretório para listar ( sourcedir ) e o (s) mimtype (s) para procurar ( filetypes ), salve-o como list_files.py e execute-o pelo comando:

python3 /path/to/list_files.py
    
por Jacob Vlijm 13.09.2014 / 16:24