คุณสามารถวนซ้ำไดเรกทอรีทั้งหมดรวมถึงไดเรกทอรีที่ซ่อนอยู่ (เริ่มต้นด้วยจุด) ด้วย:
for file in */ .*/ ; do echo "$file is a directory"; done
หมายเหตุ: การใช้รายการ*/ .*/
ทำงานใน zsh เฉพาะในกรณีที่มีอยู่อย่างน้อยหนึ่งไดเรกทอรีที่ซ่อนอยู่ในโฟลเดอร์ ในทุบตีมันจะแสดงยัง.
และ..
ความเป็นไปได้อีกอย่างสำหรับการทุบตีเพื่อรวมไดเรกทอรีที่ซ่อนอยู่คือการใช้:
shopt -s dotglob;
for file in */ ; do echo "$file is a directory"; done
หากคุณต้องการยกเว้นลิงก์:
for file in */ ; do
if [[ -d "$file" && ! -L "$file" ]]; then
echo "$file is a directory";
fi;
done
หากต้องการส่งออกเฉพาะชื่อไดเรกทอรีต่อท้าย (A, B, C ตามที่ถาม) ในแต่ละโซลูชันให้ใช้สิ่งนี้ภายในลูป:
file="${file%/}" # strip trailing slash
file="${file##*/}" # strip path and leading slash
echo "$file is the directoryname without slashes"
ตัวอย่าง (สิ่งนี้ใช้ได้กับไดเรกทอรีที่มีช่องว่างด้วย):
mkdir /tmp/A /tmp/B /tmp/C "/tmp/ dir with spaces"
for file in /tmp/*/ ; do file="${file%/}"; echo "${file##*/}"; done