Saya mencoba ls beberapa file dengan pola dalam direktori. Saya hanya ingin memindai level pertama tidak rekursif.
Skrip saya:
for i in $(ls $INCOMINGDIR/*$BUSSINESSDATE*)
do
echo $i;
done
Pemindaian perintah di atas secara rekursif. Bagaimana bisa membuatnya hanya memindai direktori level pertama?
bash
shell-script
ls
Sas
sumber
sumber
printf %s\\n "$INCOMINGDIR/"*"$BUSINESSDATE"*
Jawaban:
Jangan diurai
ls
. Juga jangan gunakan ALL_CAPS_VARSSecara interaktif,
ls
memiliki-d
opsi yang mencegah turun ke subdirektori:sumber
"${i}"
. Anda tidak pernah tahu apa yang ada di dalamnyai
.my_file.doc[newline]another_persons_file.doc
dan berharap bahwa beberapa skrip dapat mencoba "rm" apa yang dilihatnya sebagai 2 nama file ... Tautan Glenn adalah harus dibaca (di mywiki.wooledge.org, semua orang harus membaca seluruh faq, dan juga halaman jebakan)ls -d .*
Tidak ada alasan mengapa perintah ini harus bersifat rekursif. Tetapi jika
$INCOMINGDIR/*$BUSSINESSDATE*
cocok dengan direktori, maka isi direktori ini ditampilkan, bukan direktori itu sendiri. Tetapi tidak akan ada rekursi di luar level ini.Gunakan perintah ini untuk menghindari efek itu:
for ... in
perintah denganls
output berisiko.Secara umum
find
tampaknya solusi yang lebih baik atausumber