Uświadomienie ls flagi „ukrytego” pliku

12

Czy można lsrozpoznać hiddenflagę pliku w systemie Mac OS X?

Obecnie prosty ls -lOprodukuje:

$ 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

Mamy więc trzy rodzaje widoczności: zwykłe, widoczne pliki, pliki z hiddenflagą pliku, które w rzeczywistości nie są ukryte w Terminalu, i naprawdę ukryte pliki, których nazwy zaczynają się od kropki.

Czy istnieje sposób, np. Użycie aliasu lub niezawodnej funkcji powłoki, aby lstraktować hiddenflagowane .dothiddenpliki i pliki tak samo, tj. Ukrywać domyślnie i wyświetlać za pomocą ls -Alub ls -a, podobnie jak zachowuje się Finder w zależności od wartości defaults read com.apple.Finder AppleShowAllFiles?

Wiem, że man chflagskonkretnie wspomina hiddenflagę ukrywa tylko przed GUI, tj. Finder.

Daniel Beck
źródło

Odpowiedzi:

8

Są to kroki, aby uzyskać OS X, lsktóry ukrywa pliki z ukrytą flagą, chyba że -a/-Aokreślono opcję, podobnie jak pliki kropek.

  1. Zainstaluj Xcode. Korzystam z Xcode 4.5.1 poniżej.
  2. Pobrać prasowa OS libutili file_cmdsod http://www.opensource.apple.com . Po prawej stronie każdej pozycji listy pakietów znajduje się przycisk pobierania. Ten przewodnik został napisany dla systemu OS X 10.8.2, YMMV, z dokładnymi instrukcjami poniżej, jeśli używasz innej wersji.
  3. Wyodrębnij oba archiwa.
  4. Otwórz file_cmds.xcodeprojXcode i wybierz, aby zbudować lscel.

    Zrzut ekranu

  5. Wybierz file_cmdsprojekt Xcode po lewej i wybierz lscel w obszarze głównym. Na karcie Ustawienia kompilacji wyszukaj Ścieżki wyszukiwania nagłówka w kategorii Nagłówki i dodaj ścieżkę do folderu, do którego rozpakowano libutil.

    Zrzut ekranu

  6. Otwórz plik print.cw lsfolderze po lewej i usuń wiersz z napisem #include <membershipPriv.h>. Zapisz plik później. To powinno coś zepsuć, ponieważ zawiera to z jakiegoś powodu, ale jeszcze nie ustaliłem, co to jest.

  7. Otwórz plik ls.cw tym samym folderze i poszukaj komentarza /* Only display dot file if -a/-A set. */w displayfunkcji. Zastąp go i poniższy warunek następującym:

    /* 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. Naciśnij Cmd- Baby zbudować.

    Sukces!

  9. Wybierz produkty po lewej stronie (na końcu listy folderów) i kliknij prawym przyciskiem myszy ls. Wybierz Pokaż w Finderze .

    Zbuduj zrzut ekranu folderu wyjściowego

  10. Przenieś lsplik wykonywalny w dogodne miejsce, np. Katalog domowy. Następnie otwórz Terminal i uruchom sudo mv $HOME/ls /bin/ls, lub jeszcze lepiej, stwórz nowy folder o nazwie binw swoim katalogu domowym i przenieś go tam. Dodaj ten folder do swojego PATHpóźniej.

Testowanie wyniku:

$ 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
źródło