¿Hay alguna manera de enumerar solo las carpetas en un directorio usando comandos bash? (ya que el ls
comando enumera todos los archivos y carpetas)
linux
command-line
ls
SpiXel
fuente
fuente
ls -d -- */
yls -d */
?--
se usa convencionalmente para marcar el final de las opciones, de modo que si un archivo se llama-l
ls no lo interpretará como la opción de formato de listado largo.La respuesta de Stephen Martin dio una advertencia y también enumeró la carpeta actual, por lo que sugeriría
(Esto está en Linux; no pude encontrar -maxdepth y -mindepth en la página de manual de POSIX para buscar)
fuente
ls -d -- */
opción, ya quefind
también encontraré directivas ocultas. Lo que a veces puede ser útil, pero también a veces causa problemas. Espero que este comentario pueda ayudar a otros. +1Enumerará solo las carpetas. Y como señaló Teddy, necesitará -maxdepth para evitar que se vuelva a colocar en subdirectorios
fuente
-maxdepth 1
también quieras .La respuesta de Daniel es correcta. Aquí hay algunas adiciones útiles, sin embargo.
Para evitar enumerar carpetas ocultas (como
.git
), intente esto:Y para reemplazar la barra diagonal de puntos temida al comienzo de la
find
salida en algunos entornos, use esto:fuente
"Se supone que no debe" analizar la salida de ls, o eso se dice. El razonamiento detrás es que la salida está destinada a ser legible por humanos y eso puede hacer que sea innecesariamente complicado analizar, si mal no recuerdo.
si no desea ls o find, puede intentar filtrar "*" con "[-d]".
Hice exactamente eso, por alguna razón ls y descubrí que no funcionaban (supongo que los nombres de archivo con espacios y corchetes, o algo más que estaba pasando por alto), luego hice algo en la línea de
fuente
Solo para enfatizar algo que me confundió aquí, con respecto a la selección de patrones globales; di que tienes esto:
Entonces, diga aquí que desea seleccionar solo
mydir*
directorios. Tenga en cuenta que si omite la barra diagonal final, tambiénls -d
se enumerarán los archivos:... sin embargo, con una barra diagonal final, solo se enumeran los directorios:
fuente
printf "%s\n" */
enumerará todos los directorios en $ PWD.echo */
También funcionará, pero en una línea larga, más difícil cuando los nombres tienen espacios.fuente
También puedes usar:
O:
fuente