Cómo enumerar directorios y resultados en Bash

Cómo enumerar directorios y resultados en Bash

Quiero tomar una lista de directorios dentro de una carpeta y generar la lista en un ejecutable, que los usa para ejecutar algo.

Básicamente, estos archivos bash requieren una lista de carpetas dentro de my $directory, que varían desde @sub1, @sub2, @sub3y, a veces, llegan hasta 30. Todas las subcarpetas se añaden con el @símbolo.

Actualmente, agrego manualmente las subcarpetas a mi lista y se llama con -sub="$subs", donde subs se define arriba como subs="$directory/@sub1;$directory/@sub2;... etc.

Necesito mantener el mismo formato para la salida, para mantener la forma en que se construye el ejecutable.

¿Cuál es la mejor manera de automatizar esto? Lo siento si es un poco extraño, mi primera pregunta aquí.

Respuesta1

Solución posible:find . -type d -name '@*' -print0 -maxdepth 1 | xargs -0 yourprog

Carpeta vacía para empezar, unas cuantas carpetas llamadas @subX, un archivo que no queremos.

mkdir test
cd test
mkdir @sub1
mkdir @sub2
mkdir @sub3
mkdir subway
touch testfile
cd \@sub2
touch bar
mkdir @test
cd ..

Encontrar cosas e imprimirlas según el estándar, ejecutar algo con ellas y algo similar se puede hacer con find. Utilice esto en lugar de intentar analizar la salida de ls.

El primer argumento es en qué carpeta buscar ( find .por ejemplo, el directorio actual)

-type dfiltros solo a directorios (sin archivos)

-name '@*'cualquier coincidencia que comience con @

-print0Imprima el resultado según el estándar. -print también funcionará, pero -print0 hace cosas especiales en caso de espacios, etc.

-maxdepth 1No buscar subcarpetas)

Resultado de find . -type d -name '@*' -print0 -maxdepth 1la configuración anterior:

./@sub1./@sub2./@sub3

Tenga en cuenta que estos tienen el prefijo ./, lo que puede ser un problema para usted o no.

También vale la pena leer: busque la opción -exec y busque ..... {} +;

información relacionada