ทำให้ ls ตระหนักถึงการตั้งค่าสถานะไฟล์ "ซ่อน"


12

เป็นไปได้ไหมที่จะlsตระหนักถึงการhiddenตั้งค่าสถานะไฟล์บน Mac OS X

ปัจจุบันls -lOผลิตง่าย:

$ ls -lO
total 0
drwxr-xr-x@  84 danielbeck  staff  -      2856 29 Mai 22:44 Applications
drwx------+ 158 danielbeck  staff  -      5372 29 Mai 15:27 Desktop
drwx------@ 250 danielbeck  staff  -      8500 30 Mai 20:40 Documents
drwx------+  11 danielbeck  staff  -       374 29 Mai 22:21 Downloads
drwx------@  84 danielbeck  staff  -      2856 29 Mai 22:48 Library
drwx------@   3 danielbeck  staff  hidden  102  3 Apr 20:45 Movies
drwx------@   5 danielbeck  staff  hidden  170  3 Apr 20:45 Music
drwx------+ 215 danielbeck  staff  -      7310 29 Mai 22:54 Pictures
drwxr-x---@   7 danielbeck  staff  hidden  238  3 Apr 20:45 Public
drwxr-xr-x@   4 danielbeck  staff  hidden  136 24 Apr 23:25 Sites

ดังนั้นเราจึงมีทัศนวิสัยสามประเภท: ไฟล์ปกติ, ไฟล์ที่มองเห็น, ไฟล์ที่มีhiddenแฟล็กไฟล์, ที่ไม่ได้ซ่อนอยู่ใน Terminal และไฟล์ที่ซ่อนอยู่จริงๆที่มีชื่อขึ้นต้นด้วยจุด

มีวิธีเช่นการใช้นามแฝงหรือฟังก์ชั่นเปลือกที่เชื่อถือได้เพื่อให้การlsรักษาhiddenถูกตั้งค่าสถานะและ.dothiddenไฟล์เหมือนกันคือซ่อนตามค่าเริ่มต้นและแสดงด้วยls -Aหรือls -aคล้ายกับวิธีการทำงานของ Finder ขึ้นอยู่กับค่าของdefaults read com.apple.Finder AppleShowAllFiles?

ฉันทราบว่าการman chflagsระบุhiddenเฉพาะการซ่อนเฉพาะจาก GUI คือ Finder

คำตอบ:


8

ต่อไปนี้เป็นขั้นตอนในการรับ OS X lsซึ่งจะซ่อนไฟล์ที่มีค่าสถานะที่ซ่อนอยู่เว้นแต่-a/-Aจะระบุตัวเลือกคล้ายกับไฟล์ dot

  1. ติดตั้ง Xcode ฉันใช้ Xcode 4.5.1 ด้านล่าง
  2. ดาวน์โหลดรุ่น OS ของคุณlibutilและfile_cmdsจากhttp://www.opensource.apple.com มีปุ่มดาวน์โหลดทางด้านขวาของรายการแพคเกจแต่ละรายการ คู่มือนี้เขียนขึ้นสำหรับ OS X 10.8.2, YMMV พร้อมด้วยขั้นตอนที่แน่นอนด้านล่างหากคุณใช้เวอร์ชั่นอื่น
  3. แยกไฟล์เก็บถาวรทั้งสอง
  4. เปิดfile_cmds.xcodeprojใน Xcode และเลือกเพื่อสร้างlsเป้าหมาย

    ภาพหน้าจอ

  5. เลือกfile_cmdsโครงการ Xcode ทางซ้ายและเลือกlsเป้าหมายในพื้นที่หลัก ในแท็บการตั้งค่าการสร้างค้นหาเส้นทางการค้นหาส่วนหัวในประเภทส่วนหัวและเพิ่มเส้นทางไปยังโฟลเดอร์ที่คุณlibutilแตก

    ภาพหน้าจอ

  6. เปิดไฟล์print.cในโฟลเดอร์บนด้านซ้ายและลบบรรทัดที่ระบุว่าls #include <membershipPriv.h>บันทึกไฟล์หลังจากนั้น สิ่งนี้ควรทำลายบางสิ่งบางอย่างเนื่องจากมีการรวมไว้ด้วยเหตุผล แต่ฉันยังไม่ได้พิจารณาว่ามันคืออะไร

  7. เปิดไฟล์ls.cในโฟลเดอร์เดียวกันและค้นหาความคิดเห็นที่ระบุ/* Only display dot file if -a/-A set. */ในdisplayฟังก์ชัน แทนที่และเงื่อนไขด้านล่างด้วยสิ่งต่อไปนี้:

    /* Only display dot file and file with hidden flag if -a/-A set. */
    sp = cur->fts_statp;
    if (((sp != NULL && (sp->st_flags & 0x8000)) || cur->fts_name[0] == '.') && !f_listdot) {
        cur->fts_number = NO_PRINT;
        continue;
    }
    
  8. กดCmd- Bเพื่อสร้าง

    ที่ประสบความสำเร็จ!

  9. เลือกผลิตภัณฑ์ด้านซ้าย (ตอนท้ายของรายการโฟลเดอร์) lsและคลิกขวา เลือกแสดงในตัวค้นหา

    ภาพหน้าจอของโฟลเดอร์สร้างผลลัพธ์

  10. ย้ายlsไฟล์ปฏิบัติการไปไว้ที่อื่นเช่นที่บ้านของคุณ จากนั้นเปิด Terminal แล้วเรียกใช้sudo mv $HOME/ls /bin/lsหรือสร้างโฟลเดอร์ใหม่ที่ชื่อbinในโฮมไดเร็กตอรี่ของคุณแล้วย้ายไปที่นั่น เพิ่มโฟลเดอร์PATHนั้นในภายหลังของคุณ

ทดสอบผลลัพธ์:

$ mkdir test
$ cd test
$ touch foo bar
$ chflags hidden bar
$ /bin/ls -lO
total 0
-rw-r--r--@ 1 danielbeck  staff  hidden 0 25 Okt 22:25 bar
-rw-r--r--  1 danielbeck  staff  -      0 25 Okt 22:25 foo
$ $HOME/bin/ls -lO
total 0
-rw-r--r--  1 danielbeck  staff  - 0 25 Okt 22:25 foo
$ $HOME/bin/ls -A
bar foo
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.