ls
ตัวเลือก--group-directories-first
ทำให้ไดเรกทอรีที่จะแสดงรายการอยู่ด้านบนซึ่งทำให้การส่งออกของls
ดีและสะอาด:
ls -l --group-directories-first
อย่างไรก็ตามมันไม่ได้ดำเนินการกับsymlinks
ซึ่งเป็นsymlinks
ไดเรกทอรีจริงๆ มีความเป็นไปได้ที่จะใช้เป็น
ls -l -L --group-directories-first
ซึ่งจะแสดงรายการทั้งสองประเภทของไดเรกทอรีที่ด้านบน แต่จะไม่แยกความแตกต่างระหว่างไดเรกทอรีที่เหมาะสมและไดเรกทอรี symlinked ซึ่งทำให้เกิดความสับสนอีกครั้ง
สามารถls
แสดงไดเรกทอรี symlinked ด้านบนในขณะที่ยังคงแตกต่างจากไดเรกทอรีปกติได้หรือไม่
แก้ไข:bash
ฉันใช้
ls
ทำlstat()
(และreadlink
สำหรับ symlink) ยกเว้นว่าคุณใช้-L
ตัวเลือก (ซึ่งในกรณีนี้ใช้stat()
)
S_ISLNK(st_mode)
ส่งคืนจริงด้วยstat()
เช่นกัน แต่ไม่ได้ทำเช่นนั้นผ่านlstat()
เท่านั้น นอกจากนี้ ISLNK จะไม่ส่งคืนค่าจริงผ่านทางสถิติแม้ว่าลิงก์จะเป็นลิงก์ไปยังลิงก์ก็ตาม หมายความว่าISLNK
ไม่อาจกลับจริงผ่านทางสถิติ แต่ที่ไม่ได้ระบุชนิดของ ...
stat
ให้คุณสมบัติของไฟล์ในตอนท้ายของ symlink หากไม่มีอยู่หรือไม่สามารถเข้าถึงได้การstat
ส่งคืน ENOENT ดังนั้นสิ่งที่ส่งคืนโดยstat
จะไม่เป็น symlink stat()
จะไม่บอกอะไรเกี่ยวกับ symlinks เช่นเดียวกับที่open
จะไม่เปิด symlink หรือchmod()
จะไม่เปลี่ยนสิทธิ์ของ symlink ... ฯลฯ
ls
นี่คือการทำงานที่มีนิสัยแปลกในส่วนของ ตามการstat()
เรียกของระบบลิงก์สัญลักษณ์ไปยังไดเร็กทอรียังคงเป็นไดเร็กทอรี (S_ISDIR(st_mode)
จะคืนค่าจริง) evidentiallyls
ส่วนลด symlinks ก่อนที่มันจะตรวจสอบนี้