ฉันพยายาม 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"*