¿Cómo mostrar solo los archivos ocultos en la Terminal?

106

Tengo un directorio que contiene miles de archivos, algunos de ellos están ocultos.

El comando ls -a lista todos los archivos, incluidos los ocultos, pero solo necesito enumerar los archivos ocultos.

¿Qué comando debería usar?

    
pregunta nux 19.05.2014 - 02:10

10 respuestas

133

El comando:

ls -ld .?* 

Solo mostrará los archivos ocultos.

Explique:

 -l     use a long listing format

 -d, --directory
              list  directory entries instead of contents, and do not derefer‐
              ence symbolic links

.?* will only state hidden files 
    
respondido por el nux 19.05.2014 - 02:10
28
ls -d .!(|.)

Hace exactamente lo que OP está buscando.

    
respondido por el patrick 19.05.2014 - 06:52
13

Si solo quiere los archivos en su directorio actual (sin recurrencia), podría hacer

echo .[^.]*

Eso imprimirá los nombres de todos los archivos cuyo nombre comienza con un . y es seguido por uno o más caracteres que no son puntos. Tenga en cuenta que esto no funcionará para los archivos cuyo nombre comience con puntos consecutivos, por lo que, por ejemplo, ....foo no se mostrará.

También puedes usar find :

find -mindepth 1 -prune -name '.*'

El -mindepth asegura que no coincide con . y el -prune significa que find no descenderá a los subdirectorios.

    
respondido por el terdon 19.05.2014 - 04:57
11
ls -ad .*

funciona para mí en Bash.

    
respondido por el Mark 19.05.2014 - 06:55
4

Usar find y awk ,

find . -type f | awk -F"/" '$NF ~ /^\..*$/ {print $NF}'

Explicación:

find . -type f - & gt; Enumere todos los archivos en el directorio actual junto con su ruta, como

./foo.html
./bar.html
./.foo1

awk -F"/" '$NF ~ /^\..*$/ {print $NF}'

/ como separador de campo awk busca el último campo que mira con un punto o no. Si comienza con un punto, imprime el último campo de esa línea correspondiente.

    
respondido por el Avinash Raj 19.05.2014 - 04:46
3

find suele ser una mejor opción para búsquedas complicadas que usar el nombre globbing.

find . -mindepth 1 -maxdepth 1 -name '.*'

o

find . -mindepth 1 -maxdepth 1 -name '.*' -o -name '*~'

find . busca el directorio actual

-mindepth 1 excluye. y ... de la lista

-maxdepth 1 limita la búsqueda al directorio actual

-name '.*' encuentra nombres de archivos que comienzan con un punto

-o o

-name '*~' encuentra nombres de archivos que terminan con una tilde (generalmente, estos son archivos de respaldo de programas de edición de texto)

Sin embargo, esta y todas las otras respuestas faltan archivos que están en el archivo .hidden del directorio actual. Si está escribiendo una secuencia de comandos, estas líneas leerán el archivo .hidden y mostrarán los nombres de los archivos que existen.

if [[ -f .hidden]] # if '.hidden' exists and is a file
then
    while read filename # read file name from line
    do
        if [[ -e "$filename" ]] # if the read file name exists
        then
            echo "$filename" # print it
        fi
    done < .hidden # read from .hidden file
fi
    
respondido por el Mark H 19.05.2014 - 23:24
2

Creo que puedes hacerlo con el siguiente comando.

ls -a | grep "^\." | grep -v "^\.$" | grep -v "^\..$"

ls -a que ingresaste, que muestra todos los archivos y directorios en el directorio de trabajo actual.

grep "^\." El comando que anexé, que filtra la salida muestra solo los archivos ocultos (su nombre comienza con "." ).

grep -v "^\.$" | grep -v "^\..$" comando Anexé, que filtra la salida para excluir., .. (Son directorio actual y principal).

Si algunos nombres de archivo pueden tener más de una línea con "\n" , el ejemplo anterior podría ser incorrecto.

Así que sugiero seguir el comando para resolver el problema.

find -maxdepth 1 -name ".[!.]*"
    
respondido por el xiaodongjie 19.05.2014 - 04:00
2

¿Qué otra cosa podría haber hecho? is ls .?* O ls .!(|) que le mostrará todo en los directorios / dirs ocultos del directorio actual en la parte superior y otros archivos / directorios debajo de

por ejemplo: desde mi terminal

$ ls .?*       
.bash_history    .dmrc        .macromedia   .weather
.bash_logout     .gksu.lock   .profile      .wgetrc
.bash_profile    .bashrc.save .ICEauthority .toprc           .Xauthority
.bashrc          .lastdir     .viminfo      .xsession-errors
.bashrc~         .dircolors   .lynxrc       .vimrc           .xsession-errors.old

..:
Baron

.adobe:
Flash_Player

.aptitude:
cache  config

.cache:
compizconfig-1                              rhythmbox
dconf                                       shotwell

Ahora fíjate en los resultados anteriores, te muestra cada archivo / directorio con su subdirectorio y cualquier archivo oculto justo debajo.

[1:0:248][ebaron@37signals:pts/4][~/Desktop]
$ ls .!(|)
.bash_aliases  .bashrc1  .bashrc1~

..:
askapache-bash-profile.txt  examples.desktop             Public           top-1m.csv
backups             Firefox_wallpaper.png        PycharmProjects          top-1m.csv.zip
Desktop             java_error_in_PYCHARM_17581.log  Shotwell Import Log.txt  topsites.txt
Documents           Music                Templates            Videos
Downloads           Pictures                 texput.log           vmware

Lo siento, no puedo comentar para explicar la diferencia aquí entre ls .?* y @ cioby23 answer ls -d .[!.]* .??* Y por qué en realidad está imprimiendo dos veces los archivos ocultos es porque literalmente preguntas dos veces .??* , .?* , .[!.]* son lo mismo , por lo que agregar cualquiera de ellos con diferentes caracteres de comando se imprimirá dos veces.

    
respondido por el amrx 19.03.2015 - 06:47
1

También puede usar:

ls -d .[!.]* .??*

Esto le permitirá visualizar archivos ocultos normales y ocultos que comienzan con 2 o 3 puntos, por ejemplo: ..hidden_file

    
respondido por el cioby23 19.05.2014 - 07:05
1

puedes usar el comando

ls -Ad .??*

Esto tiene la ventaja de permitir el listado de varias columnas, a diferencia del enfoque basado en grep en las soluciones ls -a | grep "^\."

    
respondido por el Maythux 06.05.2015 - 17:46

Lea otras preguntas en las etiquetas