¿Hay alguna opción con el comando 'ls' para ver solo los directorios?


74

A veces, necesito verificar solo los directorios, no los archivos. ¿Hay alguna opción con el comando ls? ¿O hay alguna utilidad para hacer eso?

EDITAR : Estoy usando Mac OS X, y ls -dme da .a pesar de que tengo directorios.


44
¿Alguien puede explicar por qué ls -dsolo da .y por qué se */debe agregar al final para que funcione?
cwd

3
@cwd Si no especifica ningún archivo, el valor lspredeterminado es .. Y -dsignifica no imprimir el contenido del directorio, imprimir el directorio en sí.
Mikel

1
@cwd intente usarlo ls -pmuestra los /nombres después del directorio. Entonces, */es solo un patrón que se compara con el nombre del directorio y el /combo.
Pitt

Creé una función implementando la respuesta de @ Steven_D para mi archivo ~ / .bash_aliases: gist.github.com/rjurney/998f4951a57bfa5daeb9a6c18f6f4827
rjurney

Respuestas:


84

Sé que ya hay una respuesta seleccionada, pero puede obtener el comportamiento solicitado con solo ls:

ls -ld -- */

(Tenga en cuenta que '-' marca el final de los parámetros, evitando que los nombres de carpetas que comienzan con un guión se interpreten como otras opciones de comando).

Esto enumerará todos los directorios no ocultos (a menos que configure los globos de su shell para expandirlos) en el directorio de trabajo actual donde se ejecuta (tenga en cuenta que también incluye enlaces simbólicos a los directorios). Para obtener todos los subdirectorios de alguna otra carpeta, simplemente intente:

ls -ld /path/to/directory/*/

Tenga en cuenta que -l es opcional.


55
Agradable. Nunca consideré que los directorios tienen un implícito /al final, pero ahora que veo que respondes tiene sentido. Después de todo, la finalización de tabulación siempre lo agrega.
gvkv

-d for dir, -l for long format. ¿Para qué sirve --?
Dineshkumar

1
Si bien esto parece corto y funciona para la mayoría de los casos, es posible que no desee utilizar este enfoque cuando se necesita un directorio verdadero, no el enlace simbólico de un directorio. Entonces, en findrealidad es una buena opción en ese caso.
biocyberman

1
findTambién tiene la ventaja cuando el número de directorios excede la longitud máxima del argumento.
Steven D

Trabajando hacia atrás, me he dado cuenta de que puede simplemente ignorar cualquier cosa con una extensión: ls -alhF --ignore=*.*. No estoy seguro de qué tan bien manejaría las carpetas 'ocultas', es decir.myHiddenFolder
Timmah

14

No, pero un simple findcomando lo hará:

find . -type d -depth 1

o grep

ls -F | grep /

A continuación, puede alias cualquiera de los dos si es necesario.


66
En Ubuntu 14.04 lo fue -maxdepth 1. También findquería que find . -maxdepth 1 -type d
cambiara

¡Esa ls -F | grep /solución funciona de maravilla! Parece ser el único que puedo poner a trabajar en mi máquina FreeBSD. Creo que usar Fish significa que cualquier cosa con */puede no funcionar.
cjm

Nunca he trabajado con Fish, así que no estoy seguro de eso, pero la opción -F puede hacer maravillas.
gvkv

7

Me gusta la utilidad del árbol para obtener una visión general sobre la estructura del directorio. Está disponible en MacPorts y en todas las distribuciones de Linux que he probado.

tree -d -L 2

Eso mostraría todos los directorios, dos niveles de profundidad.


6

También necesitaba ver directorios ocultos, por lo que he modificado la sugerencia anterior para satisfacer mis necesidades.

ls -d -- */ .*/

(dependiendo del caparazón, eso también puede incluir .y ..)


2

Con zsh(como se encuentra por defecto en macOS, incluso solía estar /bin/shallí), usaría calificadores glob para seleccionar archivos en función de su tipo:

  • Listar directorios no ocultos:

    ls -d -- *(/)
    
  • Listar todos los directorios:

    ls -d -- *(D/)
    

    ( .y ..siempre están excluidos, agréguelos individualmente si lo desea)

  • También incluya enlaces simbólicos a directorios:

    ls -d -- *(D-/)
    

    ( -hace que se apliquen otros calificadores después de la resolución del enlace simbólico).


-1

Creo que ls tiene un error en Mac OS X. Una solución alternativa es usar grep ... ls -l / | grep "^d"


1
Es bueno saber que no soy la única persona que usa el grep "^d"hack
Michael Mrozek

66
Hasta donde yo sé, el comportamiento que describe no es un error y es el mismo si uno está usando GNU ls. La opción -d muestra la lista del directorio y no el contenido. Para ver por qué esto puede ser útil, vea la diferencia entre: ls -l /homeyls -dl /home
Steven D

Los quilates no son especiales para el caparazón. Solo puedes usar ls -l / | grep ^d. Si se va a usar comillas, ya que no es necesario la expansión de parámetros, que sean simples comillas. ls -l / | grep '^d'. Sí, soy pedante. Pero realmente, haz esto. :)
Comodín el

-1
$ ls -p | grep /

La -pbandera hará que se lsagregue una barra diagonal (`/ ') después de cada nombre de archivo si ese archivo es un directorio.


-2

La forma más fácil es escribir el siguiente comando. Esto funciona en la mayoría de las plataformas y versiones de UNIX y Linux. Puede omitir el -Fsi lo desea, pero es el argumento el que agrega el / al final del nombre del directorio. El -Cargumento captura solo los nombres de directorio, todos ellos en el directorio actual. Si desea ver solo directorios y subdirectorios en la ruta actual, simplemente agregue el -Rargumento ( ls -CFR).

# ls -CF
/dir1  /dir2  /dir3  /beaches  /Work  /Other 

1
En todas las lsimplementaciones que conozco y en la especificación POSIX de ls, -Ces generar en columnas , no omitir archivos que no son de directorio. En su ejemplo, /se imprimen antes de los nombres de archivo, lo que ninguna lsimplementación haría. Con -F, /se agrega al nombre del archivo para los archivos de directorio.
Stéphane Chazelas

Cuando vi esta respuesta, me pregunté "¿Dónde es esto cierto?" @ StéphaneChazelas y Jeff Schaller: ¿no rechazas las respuestas descaradamente equivocadas?
G-Man

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.