
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
, @sub3
y, 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 d
filtros solo a directorios (sin archivos)
-name '@*'
cualquier coincidencia que comience con @
-print0
Imprima el resultado según el estándar. -print también funcionará, pero -print0 hace cosas especiales en caso de espacios, etc.
-maxdepth 1
No buscar subcarpetas)
Resultado de find . -type d -name '@*' -print0 -maxdepth 1
la 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 ..... {} +;