Eu tenho um diretório que contém milhares de arquivos, alguns deles estão ocultos.
O comando ls -a
lista todos os arquivos, incluindo os ocultos, mas preciso apenas listar os arquivos ocultos.
Qual comando devo usar?
Eu tenho um diretório que contém milhares de arquivos, alguns deles estão ocultos.
O comando ls -a
lista todos os arquivos, incluindo os ocultos, mas preciso apenas listar os arquivos ocultos.
Qual comando devo usar?
O comando :
Apenas listará arquivos ocultos.
Explique :
Faz exatamente o que o OP está procurando.
Se você quer apenas os arquivos em seu diretório atual (sem recursão), você pode fazer
Isso imprimirá os nomes de todos os arquivos cujo nome começa com a
.
e é seguido por um ou mais caracteres sem ponto. Observe que isso falhará para arquivos cujo nome comece com pontos consecutivos, portanto, por exemplo....foo
, não será mostrado.Você também pode usar
find
:As
-mindepth
garantias de que não correspondemos.
e os-prune
meios quefind
não descerão aos subdiretórios.funciona para mim em Bash.
Usando
find
eawk
,Explicação:
find . -type f
--> Liste todos os arquivos no diretório atual junto com seu caminho como,awk -F"/" '$NF ~ /^\..*$/ {print $NF}'
/
como separador de campo awk verifica o último campo com um ponto ou não. Se começar com um ponto, imprime o último campo dessa linha correspondente.find
geralmente é uma opção melhor para pesquisas complicadas do que usar globbing de nomes.ou
find .
pesquisa o diretório atual-mindepth 1
exclui. e .. da lista-maxdepth 1
limita a pesquisa ao diretório atual-name '.*'
encontrar nomes de arquivos que começam com um ponto-o
ou-name '*~'
encontre nomes de arquivos que terminem com um til (geralmente, são arquivos de backup de programas de edição de texto)No entanto, esta e todas as outras respostas perdem arquivos que estão no arquivo do diretório atual
.hidden
. Se você estiver escrevendo um script, essas linhas lerão o.hidden
arquivo e exibirão os nomes dos arquivos existentes.Eu acho que você pode fazer isso com o seguinte comando.
ls -a
comando que você digitou, que mostra todos os arquivos e diretórios no diretório de trabalho atual.grep "^\."
comando que acrescentei, que filtra a saída para mostrar apenas arquivos ocultos (o nome começa com"."
).grep -v "^\.$" | grep -v "^\..$"
comando que acrescentei, que filtra a saída para excluir ., .. (Eles são o diretório atual e pai).Se alguns nomes de arquivo podem ter mais de uma linha com
"\n"
, o exemplo acima pode estar incorreto.Então, sugiro seguir o comando para resolvê-lo.
Abordagem 1:
ls -d .{[!.],.?}*
Explique: eu quero excluir
.
e..
, mas incluir arquivos como..i_am_also_a_hidden_file.txt
ls -d .*
indesejavelmente mostra.
e..
ls -d .?*
(a resposta aceita atual) mostra indesejavelmente..
ls -d .[!.]*
indesejavelmente não vai mostrar..i_am_also_a_hidden_file.txt
ls -d .{[!.],.?}*
é a respostaAbordagem 2:
ls -A | grep "\\."
Eu pessoalmente gosto mais assim
O que mais você poderia ter feito,
is ls .?*
Ouls .!(|)
isso mostrará tudo no diretório atual, arquivos / diretórios ocultos na parte superior e outros arquivos / diretórios abaixoex: do meu terminal
Agora observe nos resultados acima, ele mostra todos os arquivos/diretórios com seu subdiretório e todos os arquivos ocultos logo abaixo.
Desculpe, não posso comentar. para explicar a diferença aqui entre
ls .?*
e @ cioby23 respostals -d .[!.]* .??*
E por que está realmente imprimindo arquivos ocultos duas vezes é porque literalmente você está perguntando duas vezes.??*
,.?*
,.[!.]*
eles são a mesma coisa, então adicionar qualquer um deles com caracteres de comando diferentes imprimirá duas vezes.Com o bash, definir a
GLOBIGNORE
variável especial como um valor não vazio é suficiente para fazê-lo ignorar.
e..
ao expandir globs. Dos documentos do Bash :Se definirmos como
.:..
, ambos.
e..
serão ignorados. Como configurá-lo para qualquer coisa não nula também obterá esse comportamento, também podemos configurá-lo para apenas.
Então: