Cómo ls sin recursivo

19

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?

Sas
fuente
printf %s\\n "$INCOMINGDIR/"*"$BUSINESSDATE"*
mikeserv

Respuestas:

39

No analizarls . Tampoco use ALL_CAPS_VARS

for i in "$incoming_dir"/*"$business_date"*; do

Interactivamente, lstiene una -dopción que evita descender a subdirectorios:

ls -d $INCOMINGDIR/*$BUSSINESSDATE*
Glenn Jackman
fuente
Gracias por la información, voy a comenzar a crear archivos con nuevas líneas en el nombre solo para molestar a los administradores de sistemas ahora.
Petah
Es por eso que utiliza el programador / administrador inteligente "${i}". Nunca se sabe en qué podría estar i.
Ricky Beam
@Petah: o alguien con malas intenciones podría crear un archivo con el nombre my_file.doc[newline]another_persons_file.docy 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)
Olivier Dulac
1
frio. ¡No conocía la opción -d!
dokaspar
¡Excelente! Esto también funciona para cosas más simples. Como listar todos los archivos con prefijo de punto:ls -d .*
Wassadamo
8

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:

ls -d "$INCOMINGDIR/"*"$BUSSINESSDATE"*

for ... inLos comandos con lssalida son arriesgados.

En general findparece una mejor solución o

for i in "$INCOMINGDIR/"*"$BUSSINESSDATE"*
Hauke ​​Laging
fuente