Come fare senza ricorsivo


19

Sto provando a ls alcuni file con uno schema in una directory. Voglio solo scansionare il primo livello non ricorsivo.

La mia sceneggiatura:

for i in $(ls $INCOMINGDIR/*$BUSSINESSDATE*)
do
  echo $i;
done

Sopra il comando scansiona ricorsivamente. Come si può fare solo per scansionare la directory di primo livello?


printf %s\\n "$INCOMINGDIR/"*"$BUSINESSDATE"*
Mikeserv,

Risposte:


39

Non analizzarels . Inoltre , non utilizzare ALL_CAPS_VARS

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

Interattivo, lsha -dun'opzione che impedisce la discesa nelle sottodirectory:

ls -d $INCOMINGDIR/*$BUSSINESSDATE*

Grazie per le informazioni, inizierò a creare file con nuove righe nel nome solo per infastidire gli amministratori di sistema ora.
Petah,

Ecco perché lo sysadmin / programmatore intelligente utilizza "${i}". Non sai mai cosa potrebbe esserci i.
Ricky Beam,

@Petah: o qualcuno con cattive intenzioni potrebbe creare un file chiamato my_file.doc[newline]another_persons_file.doce sperare che alcuni script possano provare a "rm" quello che vede come 2 nomi di file ... Il link di Glenn è un must da leggere (su mywiki.wooledge.org, tutti dovrebbero leggere l'intero faq, e anche la pagina delle insidie)
Olivier Dulac il

1
freddo. non conoscevo l'opzione -d!
dokaspar,

Grande! Questo funziona anche per cose più semplici. Come elencare tutti i file con prefisso:ls -d .*
Wassadamo,

8

Non vi è alcun motivo per cui questo comando dovrebbe essere ricorsivo. Ma se $INCOMINGDIR/*$BUSSINESSDATE*corrisponde a una directory, viene visualizzato il contenuto di questa directory anziché la directory stessa. Ma non ci sarebbe alcuna ricorsione oltre questo livello.

Usa questo comando per evitare quell'effetto:

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

for ... ini comandi con lsoutput sono rischiosi.

In generale findsembra una soluzione migliore o

for i in "$INCOMINGDIR/"*"$BUSSINESSDATE"*
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.