ฉันพยายาม ls บางไฟล์ที่มีรูปแบบในไดเรกทอรี ฉันแค่ต้องการสแกนระดับแรกไม่ใช่เรียกซ้ำ
สคริปต์ของฉัน:
for i in $(ls $INCOMINGDIR/*$BUSSINESSDATE*)
do
echo $i;
done
คำสั่งข้างต้นสแกนซ้ำ จะทำให้มันสแกนไดเรกทอรีระดับแรกเท่านั้นได้อย่างไร
ฉันพยายาม ls บางไฟล์ที่มีรูปแบบในไดเรกทอรี ฉันแค่ต้องการสแกนระดับแรกไม่ใช่เรียกซ้ำ
สคริปต์ของฉัน:
for i in $(ls $INCOMINGDIR/*$BUSSINESSDATE*)
do
echo $i;
done
คำสั่งข้างต้นสแกนซ้ำ จะทำให้มันสแกนไดเรกทอรีระดับแรกเท่านั้นได้อย่างไร
คำตอบ:
ls
อย่าแยก นอกจากนี้ยังไม่ได้ใช้ ALL_CAPS_VARS
for i in "$incoming_dir"/*"$business_date"*; do
แบบโต้ตอบls
มี-d
ตัวเลือกที่ป้องกันไม่ให้ลงไปในไดเรกทอรีย่อย:
ls -d $INCOMINGDIR/*$BUSSINESSDATE*
"${i}"
ใช้โปรแกรมเมอร์ คุณไม่มีทางรู้ว่าสิ่งที่อาจจะi
มา
my_file.doc[newline]another_persons_file.doc
และหวังว่าสคริปต์บางอย่างอาจพยายามที่จะ "rm" สิ่งที่เห็นเป็น 2 ชื่อไฟล์ ... ลิงก์ของ Glenn นั้นต้องอ่าน (บน mywiki.wooledge.org ทุกคนควรอ่าน คำถามที่พบบ่อยทั้งหมดและหน้าข้อผิดพลาด)
ls -d .*
ไม่มีเหตุผลใดที่คำสั่งนี้ควรจะเรียกซ้ำ แต่ถ้า$INCOMINGDIR/*$BUSSINESSDATE*
ตรงกับไดเรกทอรีเนื้อหาของไดเรกทอรีนี้จะแสดงแทนไดเรกทอรีเอง แต่จะไม่มีการเรียกซ้ำเกินระดับนี้
ใช้คำสั่งนี้เพื่อหลีกเลี่ยงผลกระทบนั้น:
ls -d "$INCOMINGDIR/"*"$BUSSINESSDATE"*
for ... in
คำสั่งที่มีls
เอาต์พุตมีความเสี่ยง
โดยทั่วไปfind
ดูเหมือนจะเป็นทางออกที่ดีกว่าหรือ
for i in "$INCOMINGDIR/"*"$BUSSINESSDATE"*
printf %s\\n "$INCOMINGDIR/"*"$BUSINESSDATE"*