Como posso mostrar todos os tipos de arquivo contidos em um diretório?

11

Existe algum comando que me diga no diretório específico que tipos de arquivos existem?

Eu posso descobrir o tipo de arquivo usando um comando como od -c myfile | less .

Mas não sei como fazer isso para todos os arquivos em um diretório.

    
por Mohammad Reza Rezwani 02.04.2014 / 17:58

3 respostas

19

Embora od -c realmente mostre o conteúdo de um arquivo, não é uma boa maneira de obter o tipo de arquivo. Enquanto alguns arquivos conterão um cabeçalho com o tipo de arquivo, nem todos serão. Uma maneira melhor é o comando file :

$ echo "hello" > foo.txt
$ file foo.txt
foo.txt: ASCII text

Então, para obter uma lista de todos os tipos de arquivos em um diretório, você pode fazer:

for file in dir/*; do file "$file" | cut -d: -f 2; done | sort -u

Exemplo de saída:

 PNG image data, 1500 x 500, 8-bit/color RGBA, non-interlaced
 ASCII text
 directory
 GIF image data, version 89a, 22 x 22
 ELF 64-bit LSB  executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=becf821e4d814fdb69306d0b3f686eb06992f5e5, stripped

Explicação

  • for file in dir/*; do ... done; : iterar tudo em dir ( dir é apenas um exemplo, você deve alterar isso para o nome do diretório real pelo qual deseja pesquisar), salvando cada item como $file
  • file "$file" : execute file em cada um dos itens encontrados.
  • cut -d: -f 2 : imprime apenas o segundo campo (campos definidos por : )
  • sed 's/^ //; s/ +/ /g' : remova espaços do início da linha e converta espaços consecutivos em um único espaço.
  • sort -u : remova os tipos de arquivos duplicados
por terdon 02.04.2014 / 18:30
3

Eu provavelmente faria algo assim -

find . -type f -exec file {}  \;

Isso pesquisará no caminho atual, por arquivos (por exemplo, sem diretórios) e, em seguida, executará o comando file em cada arquivo.

    
por Elliott Frisch 02.04.2014 / 18:35
1

Tente isto:

ls | xargs file -b | sort | uniq

Como funciona:

ls : lista conteúdo do diretório

arquivo -b : determina o tipo de arquivo; não prefixar nomes de arquivos em linhas de saída

classificar : classificar linhas

uniq : omitir linhas repetidas

    
por Wolfy 03.04.2014 / 18:31