Quando eu uso o ls
comando com a opção -l
, a primeira sequência de letras fornece as informações sobre cada arquivo, e a primeira letra dessa sequência fornece o tipo do arquivo. ( d
= diretório, -
= arquivo padrão, l
= link etc.)
Como posso filtrar os arquivos de acordo com a primeira letra?
Respostas:
Você pode filtrar tudo, exceto os diretórios, usando
grep
esta maneira:o
^
indica que o padrão está no início da linha. Substituad
por-
,l
etc., conforme aplicável.É claro que você pode usar outros comandos para procurar diretamente tipos específicos (por exemplo
find . -maxdepth 1 -type d
) ouls -l | sort
agrupar tipos semelhantes com base nesse primeiro caractere, mas se desejar filtrar, usegrep
apenas para selecionar as linhas apropriadas na saída.fonte
ls -lL
.-L
seguirá links simbólicos para mostrar se está vinculado a um diretório ou arquivo.Se você quiser exibir toda a saída, mas tiver arquivos do tipo semelhante listados juntos, poderá classificar a saída no primeiro caractere de cada linha:
fonte
O comando
ls
está lidando com nomes de arquivos , que são registrados nas estruturas de dados do diretório. Portanto, ele realmente não se importa com o próprio arquivo, incluindo o "tipo" de um arquivo.Um comando que é mais adequado para trabalhar em arquivos reais , não apenas seus nomes, é
find
. Tem uma opção que responde diretamente à sua pergunta sobre como filtrar a lista no tipo de arquivo.Isso fornece uma lista do diretório atual semelhante a
ls -l
:Por padrão,
find
lista diretórios recursivamente, o que é desativado limitando a profundidade da pesquisa a 1.Você pode deixar de fora o
.
, mas eu o incluí para mostrar que os diretórios precisam ser listados antes das opções.Com
-type
, você pode filtrar por tipo de arquivo, expresso comof
oud
para arquivos ou diretórios simples:Existem outros valores de filtro para
-type
, principalmentel
para links simbólicos.Observe que há uma complicação com links simbólicos :
neste caso
l
, existem dois tipos de arquivo :, indicando um link simbólico e algo assimf
, indicando o tipo de arquivo vinculado. Existem opções para especificar como lidar com isso, para que você possa escolher.De
man find
:e relevante para o manuseio de links simbólicos:
e
fonte
Se você está mais preocupado em solicitar as pastas para outros tipos de arquivo, pode optar por
caso contrário, acho que você deve canalizar a saída de ls -l através de classificação ou através de grep, conforme respondido por Anthon
fonte
O awk vai pegar tudo o que começa com d. como d é para o diretório e você precisa imprimir o último campo para listar o nome do diretório
fonte
Isso classificará o resultado de acordo com a ordem alfabética de cada resultado. Se o primeiro caractere é o critério que você deseja, é isso. Se você precisar apenas dos nomes dos arquivos, poderá tentar:
Ou algo semelhante (esse comando classifica e depois divide cada linha usando o delimitador de espaço, depois retorna o segundo grupo.
fonte