J'essaie de ls certains fichiers avec un modèle dans un répertoire. Je veux seulement scanner le premier niveau non récursif.
Mon script:
for i in $(ls $INCOMINGDIR/*$BUSSINESSDATE*)
do
echo $i;
done
La commande ci-dessus balaye récursivement. Comment peut-il faire uniquement pour analyser le répertoire de premier niveau?
bash
shell-script
ls
Sas
la source
la source
printf %s\\n "$INCOMINGDIR/"*"$BUSINESSDATE"*
Réponses:
Ne pas analyser
ls
. En outre ne pas utiliser ALL_CAPS_VARSInteractivement,
ls
a une-d
option qui empêche de descendre dans les sous-répertoires:la source
"${i}"
. On ne sait jamais ce qu'il pourrait y avoiri
.my_file.doc[newline]another_persons_file.doc
et espérer que certains scripts pourraient essayer de "rm" ce qu'il considère comme 2 noms de fichiers ... Le lien de Glenn est une lecture incontournable (sur mywiki.wooledge.org, tout le monde devrait lire toute la faq, et aussi la page des pièges)ls -d .*
Il n'y a aucune raison pour que cette commande soit récursive. Mais s'il
$INCOMINGDIR/*$BUSSINESSDATE*
correspond à un répertoire, le contenu de ce répertoire est affiché à la place du répertoire lui-même. Mais il n'y aurait pas de récursivité au-delà de ce niveau.Utilisez cette commande pour éviter cet effet:
for ... in
les commandes avecls
sortie sont risquées.find
Semble en général une meilleure solution oula source