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 emdir
(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"
: executefile
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