¿Diferencia entre `ls -d */` y `ls -d *`?

¿Diferencia entre `ls -d */` y `ls -d *`?

Me cuesta entender cómo funciona ls -d. He leído las otras preguntas de ls -d pero ninguna pregunta por qué ls -d *no funciona de la misma manera que ls -d */. ¿Por qué es tan importante el carácter separador al final?

ls *y ls */comportarme de la misma manera, así que esperaba ls -d *trabajar ls -d */de la misma manera también.

En su lugar, ls -d *enumera todos los archivos en el directorio actual tal como lo hace ls, mientras que ls -d */enumera el directorio en el directorio actual. ¿Por qué esto es tan?

Respuesta1

ls *y ls */comportarse de la misma manera.

No, no lo hacen. Si tiene archivos en su directorio de trabajo, aparecerán con el primer comando, pero no con el segundo.

lsenumerará los archivos y directorios (incluido su contenido) pasados ​​en la línea de comando. Si usa shell globbing, su shell reemplazará alpatrones"con una lista de nombres de archivos ordenados alfabéticamente" (cf.Expansión de nombre de archivo).

El patrón *coincidirá con todos los archivos y directorios del directorio actual (excluyendo los archivos ocultos que comienzan con .), mientras que */solo coincidirá con los directorios (excluyendo los directorios ocultos).

El modificador -ddesactiva la lista de contenidos de los directorios, pero los archivos pasados ​​a ls seguirán apareciendo en la lista.

Respuesta2

La respuesta es: el final /obliga a ls a mirar solo directorios.

Tenga en cuenta que el comportamiento es coherente (con y sin -d).

Una pequeña prueba:

mkdir /tmp/test
touch /tmp/test/a
mkdir /tmp/test/b
touch /tmp/test/b/c
cd /tmp/test

Y luego hazlo ls *y ls */notarás la diferencia.

información relacionada