Machen Sie mich auf das "versteckte" Dateiflag aufmerksam

12

Ist es möglich, unter Mac OS X auf das Dateiflag lsaufmerksam zu machen hidden?

Derzeit produziert ein einfaches 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

Wir haben also drei Arten der Sichtbarkeit: normale, sichtbare Dateien, Dateien mit dem hiddenDateiflag, die im Terminal nicht wirklich versteckt sind, und wirklich versteckte Dateien, deren Namen mit einem Punkt beginnen.

Gibt es eine Möglichkeit, z. B. mithilfe eines Alias ​​oder einer zuverlässigen Shell-Funktion, lsBehandlung hiddenund .dothiddenDateien gleich zu machen, dh standardmäßig auszublenden und mit ls -Aoder ls -aanzuzeigen, ähnlich wie sich Finder je nach Wert von verhält defaults read com.apple.Finder AppleShowAllFiles?

Mir ist bekannt, dass man chflagsspeziell erwähnt, dass hiddenFlag nur vor der GUI, dh Finder, versteckt ist.

Daniel Beck
quelle

Antworten:

8

Dies sind die Schritte, um ein OS X zu erhalten, lsdas Dateien mit dem versteckten Flag verbirgt, sofern nicht die -a/-AOption angegeben ist, ähnlich wie bei Punktdateien.

  1. Installieren Sie Xcode. Ich verwende unten Xcode 4.5.1.
  2. Laden Sie Ihre Betriebssystemversionen libutilund file_cmdsvon http://www.opensource.apple.com herunter . Auf der rechten Seite jedes Paketlisteneintrags befindet sich eine Download-Schaltfläche. Dieses Handbuch wurde für OS X 10.8.2, YMMV mit den genauen Schritten unten geschrieben, wenn Sie eine andere Version verwenden.
  3. Extrahieren Sie beide Archive.
  4. Öffnen Sie den file_cmds.xcodeprojin Xcode und wählen Sie, um das lsZiel zu erstellen .

    Bildschirmfoto

  5. Wählen Sie file_cmdslinks das Xcode-Projekt aus und wählen Sie das lsZiel im Hauptbereich aus. In der Build - Einstellungen Registerkarte Look - Header - Suchpfade in der Header Kategorie und fügen Sie den Pfad zu dem Ordner, in dem Sie extrahiert libutil.

    Bildschirmfoto

  6. Öffnen Sie die Datei print.cim lsOrdner links und entfernen Sie die Zeile mit der Aufschrift #include <membershipPriv.h>. Speichern Sie die Datei anschließend. Dies sollte etwas kaputt machen, da Includes aus einem bestimmten Grund vorhanden sind, aber ich habe noch nicht festgestellt, was es ist.

  7. Öffnen Sie die Datei ls.cim selben Ordner und suchen Sie nach einem Kommentar /* Only display dot file if -a/-A set. */in der displayFunktion. Ersetzen Sie es und den Zustand darunter durch Folgendes:

    /* 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. Drücken Sie Cmd- Bzum Erstellen.

    Erfolg!

  9. Wählen Sie links (Ende der Ordnerliste) Produkte aus und klicken Sie mit der rechten Maustaste ls. Wählen Sie Im Finder anzeigen .

    Screenshot des Build-Ausgabeordners

  10. Verschieben Sie die lsausführbare Datei an einen geeigneten Ort, z. B. in Ihr Home-Verzeichnis. Öffnen Sie dann Terminal und führen Sie sudo mv $HOME/ls /bin/lseinen neuen Ordner mit dem Namen binin Ihrem Home-Verzeichnis aus oder verschieben Sie ihn dorthin. Fügen Sie diesen Ordner anschließend zu Ihrem hinzu PATH.

Testen des Ergebnisses:

$ 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
quelle