ทุกไดเร็กทอรีบนระบบ Unix (และอาจเป็นระบบอื่นด้วย) มีรายการไดเร็กทอรีอย่างน้อยสองรายการ เหล่านี้คือ.
(ไดเรกทอรีปัจจุบัน) และ..
(ไดเรกทอรีหลัก) ในกรณีของไดเร็กทอรีรูทจุดเหล่านี้ไปยังตำแหน่งเดียวกัน แต่ด้วยไดเร็กทอรีอื่นใด ๆ นั้นจะแตกต่างกัน คุณสามารถเห็นสิ่งนี้ได้ด้วยตัวเองโดยใช้stat
, pwd
และcd
คำสั่ง (บน Linux):
$ cd /
$ stat . .. bin sbin | grep Inode
Device: 802h/2050d Inode: 2 Links: 27
Device: 802h/2050d Inode: 2 Links: 27
Device: 802h/2050d Inode: 548865 Links: 2
Device: 802h/2050d Inode: 2670593 Links: 2
$ pwd
/
$ cd ..
$ pwd
/
$
โปรดสังเกตว่าbin
และsbin
แต่ละอันมีสองลิงก์ หนึ่งคือรายการไดเรกทอรีในไดเรกทอรีรากและอื่น ๆ เป็น.
รายการภายในไดเรกทอรีนั้น
การใช้ls
กับ pipe wc -l
เป็นเคล็ดลับง่ายๆในการนับจำนวนบรรทัดในเอาต์พุต ls สมมติฐานคือแต่ละไฟล์หรือไดเร็กทอรีจะใช้หนึ่งบรรทัดในเอาต์พุต GNU ls จะทำเช่นนี้โดยอัตโนมัติเมื่อผลลัพธ์ไม่ใช่เทอร์มินัล คนอื่นอาจต้องการ-1
ตัวเลือกในการเปิดใช้งานพฤติกรรมอย่างชัดเจน wc -l
เพียงนับและเอาท์พุทจำนวนบรรทัด ( -l
) ในอินพุตของมัน
ปัญหาด้วยวิธีที่เป็นที่อยู่ในลินุกซ์และระบบไฟล์แบบดั้งเดิมที่ใช้ชื่อลินุกซ์ไฟล์และไดเรกทอรี (พวกเขาเป็นจริงหนึ่งเดียวกันในเรื่องนี้) จะได้รับอนุญาตให้มีตัวอักษรขึ้นบรรทัดใหม่ ในการปรากฏตัวของวิธีใดวิธีหนึ่งแยกจากกัน - รายการเหล่านั้นจะถูกนับเป็นสองรายการหรือมากกว่าเมื่อในความเป็นจริงพวกเขาเป็นหนึ่ง
ตราบใดที่คุณใช้ GNU ls ไม่มีรายการไดเรกทอรีที่มีชื่อที่มีอักขระขึ้นบรรทัดใหม่และไม่มีนามแฝงแปลก ๆ สำหรับls
(ตัวอย่างเช่นls -a
) ทั้งคู่จะแสดงจำนวนไฟล์และไดเรกทอรีในไดเรกทอรีปัจจุบัน (หรือที่ระบุ) สำหรับคนส่วนใหญ่แล้วสิ่งนี้ดีพอ แต่มันไม่ถูกต้องในกรณีทั่วไป
หากคุณต้องการจัดการอักขระที่ผิดปกติ (ขึ้นบรรทัดใหม่) ในชื่อรายการไดเรกทอรีอย่างถูกต้องฉันขอแนะนำให้ใช้-b
ตัวเลือกของ ls เพื่อหลีกเลี่ยงพวกเขา ls -1bA
จะพิมพ์ชื่อรายการไดเรกทอรีแต่ละรายการในบรรทัดของตัวเองยกเว้นอักขระที่ผิดปกติ (ดังนั้นแต่ละรายการไดเรกทอรีจะถูกมองเป็นหนึ่ง) รวมถึง dotfiles และ -directories แทคบนwc -l
สำหรับบรรทัดคำสั่งที่สมบูรณ์ของls -1bA | wc -l
ซึ่งจะรายงานจำนวนไฟล์และไดเรกทอรีในไดเรกทอรีปัจจุบัน ( แต่ไม่สนใจ.
และ..
นั่นคือความแตกต่างระหว่าง-a
และ-A
) แต่ไม่ลงไปในไดเรกทอรีย่อยใด ๆ หากคุณไม่ต้องการ dotfiles ใด ๆ ที่จะนับรวมเพียงละเว้นพารามิเตอร์-A
ls