Não sei se ls
é capaz de exibir uma coluna de tipo de arquivo.
Fazer uma pesquisa on-line rápida e pesquisar no man
não revelou essa capacidade. É capaz de fazer isso?
Esclarecimento: Isso é especialmente útil se os arquivos não tiverem uma extensão.
Atualizar
A partir de 28/04/2018, as respostas foram bastante interessantes, mas não forneceram o que eu estava procurando. Mais especificamente,
file
fornece os tipos de arquivos reais, mas não se integra bem a elesls
. Especificamente, eu usols -lhtrpG --group-directories-first --color=always
ls -F
é umals
solução, no entanto, fornece símbolos e não uma coluna de tipos de arquivos reais.
Por esse motivo, não marquei nenhuma das respostas como a que estou procurando.
command-line
ls
user10853
fonte
fonte
ls -lahtrpF --group-directories-first --color=always /dev
ouls -lsahG /dev
legível por programals -lsa /dev
. consulte aman ls
documentação para obter detalhes.Respostas:
file
é definitivamente a escolha certa para obter as informações de tipo de arquivo que você deseja. Para combinar sua saída com a dels
sugiro usarfind
:Ele localiza todos os arquivos no diretório atual e imprime a saída
ls -dils
e a saídafile -b
dele, cada uma em uma linha própria. Exemplo de saída:Mas, como você não deseja uma linha de tipo de arquivo , mas sim uma coluna , aqui está uma maneira de se livrar do caractere de nova linha entre as linhas:
Saída de amostra:
Essa nova coluna é bastante longa, então vamos cortar tudo desde a primeira vírgula:
A saída disso é assim:
Isso não é muito útil, então que tal um
alias
? Com a seguinte linha no seu~/.bash_aliases
arquivo, você só precisa executarlsf
para obter a saída acima para o diretório atual.fonte
paste
oucolumn
, poderá obter um melhor alinhamento:lsf () { find -maxdepth 1 -type f -exec bash -c 'column <(ls -l "$@") <(file -b "$@" | cut -d, -f1)' _ {} + ; }
o problema de alinhamento não é evidente na resposta devido aos tamanhos e datas semelhantes. (Este também será um pouco mais rápido, uma vez que os comandos será invocado menos vezes em vez de uma vez por arquivo.)column
abordagem funciona para você? Ele só imprime a saídals -l
para cada arquivo seguido porfile
's saída para cada arquivo para mim, como se o shell só iria fazerls -l "$@"; file -b "$@" | cut -d, -f1
.../etc
.column
a saída não estiver no terminal, é necessário especificar a contagem de colunas ou os arquivos serão gerados um após o outro; portanto,column -c "$COLUMNS" ...
deve funcionar nos dois casos.Eu acho que a melhor maneira de exibir um tipo de arquivo é usando este comando:
Se você deseja listar os tipos de todos os arquivos em um diretório, use:
Para mais detalhes sobre os argumentos, consulte:
fonte
mime type
única, use:file --mime-type filename
.file
muito bem, mas essa pergunta é diferente.file
responder. Como eu respondi aos outros, isso não é suficiente (precisa ser integrado ao ls), por isso mantenho-o em votação. Obrigado.file --mime /dev/*
para list mimes no diretório / dev em vez de atualPara maior clareza, vou apontar que você pode ver o tipo de arquivo em um sentido básico com
ls
, usando a-F
flag (classify) que anexa um símbolo ao nome do arquivo, dependendo do seu tipo:Você pode ver essas informações um pouco menos criptografadas na primeira letra da saída de
ls -l
, no entanto. A resposta de wjandrea descreve isso com mais detalhes.Mas acho que não é isso que você entende por tipo de arquivo. O
ls
comando não procura dentro dos arquivos regulares - apenas nas listagens de diretório (que armazenam nomes de arquivos) e inodes (que armazenam metadados, incluindo o "tipo" no sentido mencionado anteriormente).Portanto, o
ls
comando não pode mostrar o tipo de arquivo no sentido de ser uma imagem JPG ou um arquivo binário ou um arquivo de texto ou um documento do LibreOffice de algum tipo, porque não possui essas informações.Para isso, como a resposta do singrium indica, você precisa do
file
comando, que analisa os primeiros 50-100kB ou mais do conteúdo dos arquivos para determinar seu tipo.fonte
Uma forma de tipo de arquivo é se um arquivo é um arquivo regular, diretório, dispositivo, link simbólico etc.
ls
pode mostrar isso usando as opções-l
ou-F
.A opção
-l
mostrará o tipo de arquivo como um único caractere no início de uma listagem, por exemplo:Onde
-
está um arquivo regular,d
é um diretório el
é um link simbólico.A opção
-F
mostrará o tipo de arquivo como um sufixo, por exemplo:Onde nenhum sufixo é um arquivo regular,
/
é um diretório e@
é um link simbólico.Mais informações sobre isso estão disponíveis em
info coreutils 'ls invocation'
, resumidas aqui:Para
-l
:Para
-F
:fonte