file
é definitivamente a escolha certa para obter as informações de tipo de arquivo desejadas. Para combinar sua saída com a de ls
, sugiro usar find
:
find -maxdepth 1 -type f -ls -exec file -b {} \;
Isso encontra todos os arquivos no diretório atual e imprime a saída de ls -dils
, bem como a saída de file -b
, cada um em uma linha própria. Exemplo de saída:
2757145 4 -rw-rw-r-- 1 dessert dessert 914 Apr 26 14:02 ./some.html
HTML document, ASCII text
2757135 4 -rw-rw-r-- 1 dessert dessert 201 Apr 13 15:26 ./a_text_file
UTF-8 Unicode text, with CRLF, LF line terminators
Mas, como você não quer um tipo de arquivo linha , mas uma coluna de tipo de arquivo , aqui está uma maneira de se livrar do caractere de nova linha entre as linhas:
find -maxdepth 1 -type f -exec sh -c "ls -l {} | tr '\n' '\t'; file -b {}" \;
Exemplo de saída:
-rw-rw-r-- 1 dessert dessert 914 Apr 26 14:02 ./some.html HTML document, ASCII text
-rw-rw-r-- 1 dessert dessert 201 Apr 13 15:26 ./a_text_file UTF-8 Unicode text, with CRLF, LF line terminators
Essa nova coluna é bem longa, então vamos cortar tudo da primeira vírgula:
find -maxdepth 1 -type f -exec sh -c "ls -l {} | tr '\n' '\t'; file -b {} | cut -d, -f1" \;
A saída disso é assim:
-rw-rw-r-- 1 dessert dessert 914 Apr 26 14:02 ./some.html HTML document
-rw-rw-r-- 1 dessert dessert 201 Apr 13 15:26 ./a_text_file UTF-8 Unicode text
Isso não é muito útil, então que tal um alias
? Com a seguinte linha no seu arquivo ~/.bash_aliases
, você só precisa executar lsf
para obter a saída acima para o diretório atual.
alias lsf='find -maxdepth 1 -type f -exec sh -c "ls -l {} | tr '"'\n'"' '"'\t'"'; file -b {} | cut -d, -f1" \;'