Membuat saya sadar akan bendera file "tersembunyi"

12

Apakah mungkin untuk lsmengetahui hiddenflag file pada Mac OS X?

Saat ini, sederhana ls -lOmenghasilkan:

$ 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

Jadi kami memiliki tiga jenis visibilitas: file biasa, file yang terlihat, file dengan hiddenflag file, yang sebenarnya tidak disembunyikan di Terminal, dan file yang benar - benar tersembunyi yang namanya dimulai dengan titik.

Apakah ada cara, misalnya menggunakan alias atau fungsi shell yang dapat diandalkan, untuk membuat lsmemperlakukan hiddenflag dan .dothiddenfile sama, yaitu bersembunyi secara default dan menunjukkan dengan ls -Aatau ls -a, mirip dengan bagaimana Finder berperilaku tergantung pada nilai defaults read com.apple.Finder AppleShowAllFiles?

Saya sadar bahwa man chflagssecara khusus menyebutkan hiddenflag hanya menyembunyikan dari GUI, yaitu Finder.

Daniel Beck
sumber

Jawaban:

8

Ini adalah langkah-langkah untuk mendapatkan OS X lsyang menyembunyikan file dengan flag tersembunyi kecuali -a/-Aopsi yang ditentukan, mirip dengan file dot.

  1. Instal Xcode. Saya menggunakan Xcode 4.5.1 di bawah ini.
  2. Unduh rilis OS Anda libutildan file_cmdsdari http://www.opensource.apple.com . Ada tombol unduh di sebelah kanan setiap entri daftar paket. Panduan ini ditulis untuk OS X 10.8.2, YMMV dengan langkah-langkah tepat di bawah ini jika Anda menggunakan versi yang berbeda.
  3. Ekstrak kedua arsip.
  4. Buka file_cmds.xcodeprojin Xcode dan pilih untuk membangun lstarget.

    Tangkapan layar

  5. Pilih file_cmdsproyek Xcode di sebelah kiri, dan pilih lstarget di area utama. Di tab Bangun Pengaturan , cari Jalur Pencarian Header dalam kategori Header dan tambahkan path ke folder ke tempat Anda diekstraksi libutil.

    Tangkapan layar

  6. Buka file print.cdi lsfolder di sebelah kiri, dan hapus baris yang mengatakan #include <membershipPriv.h>. Simpan file sesudahnya. Ini harus merusak sesuatu, karena termasuk ada karena suatu alasan, tetapi saya belum menentukan apa itu.

  7. Buka file ls.cdi folder yang sama, dan cari komentar yang mengatakan /* Only display dot file if -a/-A set. */dalam displayfungsinya. Ganti dan kondisi di bawahnya dengan yang berikut ini:

    /* 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. Tekan Cmd- Buntuk membangun.

    Keberhasilan!

  9. Pilih Produk di sebelah kiri (akhir daftar folder) dan klik kanan ls. Pilih Show in Finder .

    Bangun tangkapan layar folder Keluaran

  10. Pindahkan lsexecutable ke tempat yang nyaman, misalnya direktori home Anda. Kemudian buka Terminal dan jalankan sudo mv $HOME/ls /bin/ls, atau, lebih baik lagi, buat folder baru bernama bindi direktori home Anda dan pindahkan ke sana. Tambahkan folder itu ke Anda PATHsesudahnya.

Menguji hasilnya:

$ 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
Daniel Beck
sumber