Mostrar apenas arquivos ocultos (arquivos de ponto) no ls alias

43

Estou usando o comando

ls -a | grep '^\.'

para mostrar apenas os arquivos ocultos. Eu adicionei a linha

alias hidden='ls -a | grep '^\.'' # show only hidden files

para .bash_aliasesarquivo

mas isso não funciona. Provavelmente é o problema com o 'personagem.

Você poderia me ajudar a escrever o alias correto?

xralf
fonte
com exemplos ainda mais complexos, você raramente precisa mudar de aspas simples para aspas duplas. Isso pode ser feito apenas colocando as aspas umas contra as outras. Para este exemplo, seria 'ls -a | grep '"'"'^\.'"'"'péssimo (e, para este exemplo, é completamente desnecessário porque você pode trocar aspas duplas por qualquer um dos pares), mas em ocasiões muito raras, é útil. Você também pode querer -Csinalizador (forçar a saída de várias colunas). Veja esta imagem imgur.com/a/VIVFP
Dylan

Respostas:

27

Faça o par interno de aspas entre aspas:

alias hidden='ls -a | grep "^\."'

Ou faça o par externo de aspas entre aspas:

alias hidden="ls -a | grep '^\.'"

Ou faça todas as aspas entre aspas e escape do par interno:

alias hidden="ls -a | grep \"^\.\""

Ou torne-a uma função, para que você possa passar alguns argumentos ao chamar:

hidden() { ls -a "$@" | grep '^\.'; }
homem a trabalhar
fonte
90

Faça com que o shell liste os arquivos de ponto e diga lspara não ver nos diretórios:

ls -d .*
Gilles 'SO- parar de ser mau'
fonte
6
Isso tem a vantagem de permitir a listagem de várias colunas, diferente da grepabordagem baseada em.
Anol12 /
No entanto, mostra também diretórios (como mencionado). Alguma maneira de mantê-lo simples como está e mostrar apenas arquivos?
Honzajde 10/09/16
@honzajde A pergunta não pediu para excluir diretórios. Se você deseja excluir diretórios, você pode usar ls -d .* | grep -v '^d'ou (apenas zsh)print -lr .*(.)
Gilles 'SO- stop be evil'
isso não funciona para mim, no Ubuntu 16.04
Andrew_1510 8/17
9
ls -Ad .* #This will list all the hidden files & directories while retaining the color & formatting

OU

Para criar um alias do mesmo:

alias lh='ls -Ad .*'

OU

O mesmo poderia ser feito via comando grep e operador de pipe; no entanto, perderia a cor e a formatação:

ls -a|grep "^\." 

OU

Via alias:

alias lh='ls -a|grep "^\."'
Prince Bhanwra
fonte
4

Você pode usar aspas duplas:

alias hidden="ls -a | grep '^\.'"

ou concatenar mais seqüências de caracteres com aspas simples

alias hidden='ls -a | grep '\''^\.'\'

ou remover todas as cotações internas

alias hidden='ls -a | grep ^\\.'
enzotib
fonte
2

Para o registro, isso não parece funcionar comigo, pois ls -aimprime duas (às vezes mais colunas). Eu recomendaria usar a -1opção para garantir que todos os arquivos estejam em sua própria linha. Algo assim:

alias hidden='ls -a1 | grep "^\."'
rahmu
fonte
Eu apenas tentei ls -a | catainda sai em 2 colunas. Devo mencionar que estou usando Solaris e não o GNU ls. Talvez seja por isso. Em todos os casos, sua -1solução funcionou perfeitamente e é muito mais elegante que minha solução alternativa. Estou atualizando minha resposta.
rahmu
Provavelmente perdi essa discussão, mas veja aqui se algo der errado.
Xralf # 28/11
1

Tornando-o um pouco mais complicado, mas evitando a análisels .

llsh () { find "${@:-.}/" -maxdepth 1 -type f -name ".*" -ls; }

lsh () { find "${@:-.}/" -maxdepth 1 -type f -name ".*" -print; }

A função de dois shell será usada findpara gerar uma lista de todos os arquivos regulares ocultos no diretório atual ou no diretório fornecido na linha de comando.

A llshfunção irá gerar uma "lista longa", que será apenas um pouco mais detalhada do que ls -l, enquanto lshgera uma lista de coluna única como ls -1.

Kusalananda
fonte
0
find . -type f -name ".*"

OU

find . -type f -name ".*" | while read file; do basename $file; done
kemiko
fonte
Oi! Você pode melhorar sua resposta explicando em detalhes como ela funciona e também mencionando por que, na sua opinião, responde à pergunta.
Dag #
0
# add it to ~/.bashrc

    hidden() {  # lists hidden files and directories
        find . -maxdepth 1 -name '.?*' -exec ls --color -d {} \;
        }

    hiddenfiles() { # lists hidden files
        find . -maxdepth 1 -type f -name '.?*' -exec ls --color -d {} \;
        }

    hiddendirs() { # lists directories
        find . -maxdepth 1 -type d -name '.?*' -exec ls --color -d {} \;
        }
Akhil J
fonte
-1

Seu lsapoio -A? De man ls:

    -a, --all
          do not ignore entries starting with .

   -A, --almost-all
          do not list implied . and ..

$ ls --version
ls (GNU coreutils) 8.5
Copyright (C) 2010 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  
Written by Richard M. Stallman and David MacKenzie.
waltinator
fonte
Sim, mas queria onlyarquivos ocultos.
Xralf
ls -A -1 -d -F .* | egrep -v '/$'
waltinator
-3

Basta digitar o comando abaixo e não confundir com o que foi explicado acima.

ls -A -1 -d -F .* | egrep -v '/$'
srinath
fonte
Eu acho que o OP pediu como escrever um apelido corretamente.
Countermode #
1
Isso é apenas uma cópia do comentário do waltinator sobre sua resposta. Para que essa resposta seja útil, você precisa explicar como e por que esses lssinalizadores específicos e o egrepcomando respondem à pergunta.
Anthony G - Justice para Monica
-3
ls -lart | sed -n "/ \.[A-Za-z0-9][A-Za-z0-9]*/p"
shailesh Chanderiya
fonte
2
Você pode por favor esclarecer a sua resposta, uma linha de código não é contado como boa resposta
Romeo Ninov
conforme o requisito, ele precisa listar apenas arquivos ocultos. então eu tenho uma lista de todos os arquivos, incluindo arquivos ocultos por ls -lart. então eu uso regex para mostrar os arquivos que é iniciado com ponto (.). Eu tenho uma saída assim.
Shailesh Chanderiya
[g906016 @ hklu2574881: [PTA] ~] $ ls -lart | sed -n "/ \. [A-Za-z0-9] [A-Za-z0-9] * / p" -rw-r - r-- 1 g906016 g906016 658 29 de dezembro de 2016 .zshrc -rw- r - r-- 1 g906016 g906016 171 dez 29 2016 .kshrc -rw ------- 1 g906016 g906016 27 dez 29 2016 .k5login -rw-r - r-- 1 g906016 g906016 176 dez 29 2016. bash_profile -rw-r - r-- 1 g906016 g906016 18 de dezembro de 2016 .bash_logout -rwxr-xr-x 1 g906016 g906016 0 dez 29 2016 .dir_colors drwxr-x --- 3 g906016 g906016 4096 dez 29 dezembro 2016
Veja o que seus amigos estão dizendo