Mostrar solo archivos ocultos (archivos de puntos) en alias ls

43

Estoy usando el comando

ls -a | grep '^\.'

para mostrar solo los archivos ocultos. Agregué la línea

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

de .bash_aliasesarchivo

Pero esto no funciona. Probablemente sea el problema con el 'personaje.

¿Podrías ayudarme a escribir el alias correcto?

xralf
fuente
con ejemplos que son aún más complejos, rara vez tiene que cambiar de comillas simples a comillas dobles. Esto se puede hacer simplemente uniendo las citas entre sí. Para este ejemplo, sería 'ls -a | grep '"'"'^\.'"'"'Parece horrible (y para este ejemplo es completamente innecesario porque puede intercambiar comillas dobles para cualquiera de los pares), pero en muy raras ocasiones es útil. También es posible que desee -Cmarcar (forzar salida de varias columnas). Ver esta imagen imgur.com/a/VIVFP
Dylan

Respuestas:

27

O bien, haga que el par interno de comillas sea doble:

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

O haga que el par externo de comillas sea doble:

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

O haga todas las comillas comillas dobles y escape del par interno:

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

O conviértalo en una función, para que pueda pasar algunos argumentos al llamar:

hidden() { ls -a "$@" | grep '^\.'; }
hombre trabajando
fuente
90

Haga que el shell enumere los archivos de puntos y diga que lsno vea los directorios:

ls -d .*
Gilles 'SO- deja de ser malvado'
fuente
66
Esto tiene la ventaja de permitir el listado de varias columnas, a diferencia del grepenfoque basado en.
Anol
Sin embargo, muestra también directorios (como se mencionó). ¿Alguna forma de mantenerlo simple como está y mostrar solo archivos?
honzajde
@honzajde La pregunta no pedía excluir directorios. Si desea excluir directorios, puede usar ls -d .* | grep -v '^d'o (solo zsh)print -lr .*(.)
Gilles 'SO- deja de ser malvado'
esto no funciona para mí, en Ubuntu 16.04
Andrew_1510
9
ls -Ad .* #This will list all the hidden files & directories while retaining the color & formatting

O

Para crear un alias de lo mismo:

alias lh='ls -Ad .*'

O

Lo mismo podría hacerse a través del comando grep y el operador de tubería; sin embargo, perdería el color y el formato:

ls -a|grep "^\." 

O

Vía alias:

alias lh='ls -a|grep "^\."'
Príncipe Bhanwra
fuente
4

Puedes usar comillas dobles:

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

o concatenar más cadenas entre comillas simples

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

o eliminar en todas las citas internas

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

Para el registro, esto no parece funcionar conmigo, ya que ls -aimprime dos (a veces más columnas). Recomendaría usar la -1opción para asegurarse de que cada archivo esté en su propia línea. Algo como esto:

alias hidden='ls -a1 | grep "^\."'
rahmu
fuente
Acabo de probarlo ls -a | cattodavía sale en 2 columnas. Debo mencionar que estoy usando Solaris y no el GNU ls. Tal vez por eso. En todos los casos, su -1solución funcionó a la perfección y es mucho más elegante que mi solución alternativa. Estoy actualizando mi respuesta.
rahmu
Probablemente me perdí esta discusión, pero mira aquí si algo sale mal.
xralf
1

Haciéndolo un poco más complicado, pero evitando el análisisls .

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

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

Las dos funciones de shell se usarán findpara generar una lista de todos los archivos regulares ocultos en el directorio actual, o en el directorio dado en la línea de comando.

La llshfunción generará un "listado largo" que será solo un poco más detallado que ls -l, mientras que lshgenera un listado de una sola columna como ls -1.

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

O

find . -type f -name ".*" | while read file; do basename $file; done
kemiko
fuente
¡Hola! Puede mejorar su respuesta explicando en detalle cómo funciona y también mencionando por qué, en su opinión, responde a la pregunta.
dhag
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
fuente
-1

¿Su lsapoyo -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
fuente
Sí, pero quería onlyarchivos ocultos.
xralf
ls -A -1 -d -F .* | egrep -v '/$'
waltinator
-3

Simplemente escriba el comando a continuación y no confunda con las cosas explicadas anteriormente.

ls -A -1 -d -F .* | egrep -v '/$'
srinath
fuente
Creo que el OP preguntó cómo escribir un alias correctamente.
contramode
1
Eso es solo una copia del comentario de waltinator sobre su respuesta. Para que esta respuesta sea útil, debe explicar cómo y por qué esos lsindicadores en particular y el egrepcomando responden la pregunta.
Anthony G - justicia para Mónica
-3
ls -lart | sed -n "/ \.[A-Za-z0-9][A-Za-z0-9]*/p"
Shailesh Chanderiya
fuente
2
¿Puede aclarar su respuesta? Una línea de código no se considera una buena respuesta
Romeo Ninov
según el requisito, debe enumerar solo los archivos ocultos. así que tengo una lista de todos los archivos, incluidos los archivos ocultos por ls -lart entonces uso regex para mostrar los archivos que comienzan con punto (.). Tengo una salida como esta.
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 dic 29 2016 .zshrc -rw- r - r-- 1 g906016 g906016 171 dic 29 2016 .kshrc -rw ------- 1 g906016 g906016 27 dic 29 2016 .k5login -rw-r - r-- 1 g906016 g906016 176 dic 29 2016. bash_profile -rw-r - r-- 1 g906016 g906016 18 dic 29 2016 .bash_logout -rwxr-xr-x 1 g906016 g906016 0 dic 29 2016 .dir_colors drwxr-x --- 3 g906016 g906016 4096 dic 29 2016 .subversion
Shailesh Chanderiya