Estoy tratando de ls algunos archivos con un patrón en un directorio. Solo quiero escanear el primer nivel no recursivo.
Mi guión:
for i in $(ls $INCOMINGDIR/*$BUSSINESSDATE*)
do
echo $i;
done
El comando anterior escanea recursivamente. ¿Cómo puede hacer que solo se escanee el directorio de primer nivel?
bash
shell-script
ls
Sas
fuente
fuente
printf %s\\n "$INCOMINGDIR/"*"$BUSINESSDATE"*
Respuestas:
No analizar
ls
. Tampoco use ALL_CAPS_VARSInteractivamente,
ls
tiene una-d
opción que evita descender a subdirectorios:fuente
"${i}"
. Nunca se sabe en qué podría estari
.my_file.doc[newline]another_persons_file.doc
y esperar que algunos scripts intenten "rm" lo que ve como 2 nombres de archivo ... El enlace de Glenn es una lectura obligada (en mywiki.wooledge.org, todos deberían leerlo) todo el faq, y también la página de escollos)ls -d .*
No hay razón para que este comando sea recursivo. Pero si
$INCOMINGDIR/*$BUSSINESSDATE*
coincide con un directorio, se muestra el contenido de este directorio en lugar del directorio en sí. Pero no habría recursividad más allá de este nivel.Use este comando para evitar ese efecto:
for ... in
Los comandos conls
salida son arriesgados.En general
find
parece una mejor solución ofuente