GNU/Linux >> Tutoriales Linux >  >> Linux

El comando 'ls -d' no muestra directorios. ¿Hay alguna manera de hacer que 'ls' solo muestre directorios en lugar de archivos y directorios?

Sus expectativas se basan en DOS Think/Windows Think y son incorrectas. En MS-DOS, Windows y, de hecho, en algunos otros sistemas operativos de IBM/Microsoft, la expansión de comodines se realiza mediante el propio comando, y cosas como /a opción al dir El comando actúa como filtro de atributos durante la expansión de comodines. dir expande comodines como * , que el intérprete de comandos le pasa tal cual, y si /a se especifica aplica los filtros apropiados a lo que se devuelve. (En algunos sistemas operativos, los filtros de atributos pueden asignarse a la llamada del sistema para enumerar un directorio y el núcleo del sistema operativo, o sus controladores de sistema de archivos, los aplica por sí mismo).

En Unices y en Linux, la expansión de comodines la realiza el shell y no tiene en cuenta los permisos. Cuando, en el directorio raíz, haces

ls *

qué demonios ls el comando mismo recibe del caparazón es (algo así como)

ls bin home opt var boot dev tmp etc lost+found root usr

¿Qué diablos -d /--directory La opción que hace es desactivar lo que sucede normalmente a continuación . Lo que normalmente sucede a continuación es que ls examina cada uno de sus argumentos, ve que son directorios y decide enumerar su contenido. Para argumentos que nombran archivos, simplemente imprime la información del archivo en sí. Con el -d opción, los directorios se tratan como archivos. Entonces ls imprime la información de cada uno de los directorios que se pasan como sus argumentos, tal como lo haría si fueran archivos.

Entonces -d no es una opción de "imprimir solo directorios". De hecho, no solo no existe tal opción; no no puede ser tal opción. La expansión con comodines la realiza el shell y (en un POSIX sh al menos) no hay forma de decirle al shell que verifique los permisos y los bits de tipo de archivo cuando se expande * en una lista de nombres. Para obtener una lista de los nombres de los directorios solo, es necesario usar el find comando, como se explica en ztank1013 , o para usar el truco de que un nombre de ruta que termina con una barra inclinada implica la entrada de directorio . , como se explica en Jin . (Jin El truco de termina con el ls comando que recibe los argumentos

ls bin/ home/ opt/ var/ boot/ dev/ tmp/ etc/ lost+found/ root/ usr/

porque el patrón */ de hecho, está haciendo coincidir nombres de ruta con dos componentes, el segundo está vacío, por lo que no es bastante haciendo lo que se deseaba. En particular, tratará los enlaces simbólicos que apuntan a directorios como si fueran directorios).

El comportamiento de ls -d sin un * es una simple extensión de la anterior. Uno simplemente tiene que saber una cosa más sobre ls :Cuando no se le dan argumentos, asume un argumento predeterminado de . . Ahora sin el -d opción, el comportamiento mencionado anteriormente conduce al contenido del directorio nombrado por . siendo enumerados y la información de su contenido mostrada. Con el -d opción, el directorio . se trata como si fuera un archivo y se muestra su propia información, en lugar de enumerar su contenido.


Puedes usar ls -d */ o ls -d .*/ para directorios ocultos.


Prueba esto

 find . -mindepth 1 -maxdepth 1 -type d

para obtener solo directorios bajo su ubicación actual.


Linux
  1. Encuentra archivos y directorios en Linux con el comando de búsqueda

  2. Una manera fácil de ocultar archivos y directorios en Linux

  3. ¿Cómo obtener un recuento de archivos en un directorio usando la línea de comando?

  4. Eliminar solo archivos en el directorio en linux NO directorios

  5. ¿Hay alguna manera de cambiar una identificación de volumen de archivos .iso desde la línea de comando?

Cómo usar el comando cp para copiar archivos y directorios

Copie archivos y cree directorios de destino al mismo tiempo

La forma más rápida de contar archivos recursivamente en Linux

Manera fácil de fusionar archivos con el comando Cat

4 formas de transferir archivos y directorios en Linux

Comando Stat:mostrar atributos de archivos y directorios