Ich versuche, einige Dateien mit einem Muster in einem Verzeichnis zu ls. Ich möchte nur die erste Ebene nicht rekursiv scannen.
Mein Drehbuch:
for i in $(ls $INCOMINGDIR/*$BUSSINESSDATE*)
do
echo $i;
done
Über Befehl rekursiv scannen. Wie kann man es nur schaffen, das Verzeichnis der ersten Ebene zu scannen?
bash
shell-script
ls
Sas
quelle
quelle
printf %s\\n "$INCOMINGDIR/"*"$BUSINESSDATE"*
Antworten:
Nicht analysieren
ls
. Verwenden Sie auch nicht ALL_CAPS_VARSInteraktiv,
ls
hat eine-d
Option, die verhindert, dass in Unterverzeichnisse absteigend:quelle
"${i}"
. Sie wissen nie, was drin sein könntei
.my_file.doc[newline]another_persons_file.doc
und hoffen, dass einige Skripte versuchen, die darin enthaltenen 2 Dateinamen zu "rm" ... Glenns Link ist ein Muss (auf mywiki.wooledge.org sollte jeder lesen) die ganze FAQ und auch die Fallstricke Seite)ls -d .*
Es gibt keinen Grund, warum dieser Befehl rekursiv sein sollte. Wenn jedoch eine
$INCOMINGDIR/*$BUSSINESSDATE*
Übereinstimmung mit einem Verzeichnis vorliegt, wird der Inhalt dieses Verzeichnisses anstelle des Verzeichnisses selbst angezeigt. Aber es würde keine Rekursion jenseits dieser Ebene geben.Verwenden Sie diesen Befehl, um diesen Effekt zu vermeiden:
for ... in
befehle mitls
Ausgabe sind riskant.Im Allgemeinen
find
scheint eine bessere Lösung oderquelle