Laut der Manpage ls sollten Sie in der Lage sein, die -O
Option mit der -l
Option zu kombinieren , Flags mit ls anzuzeigen. Beispielsweise:
ls -Ol foo.txt
-rw-r--r-- 1 harry staff - 0 18 Aug 19:11 foo.txt
chflags hidden foo.txt
ls -Ol foo.txt
-rw-r--r-- 1 harry staff hidden 0 18 Aug 19:11 foo.txt
chflags nohidden foo.txt
ls -Ol foo.txt
-rw-r--r-- 1 harry staff - 0 18 Aug 19:11 foo.txt
Bearbeiten: Nur um eine spezifischere Lösung für das zu finden, was das OP wollte (siehe Kommentare unten): Um zu sehen, ob ein Ordner ausgeblendet ist oder nicht, können wir die -a
Option an ls übergeben, um den Ordner selbst anzuzeigen. Wir können dann die Ausgabe in sed -n 2p
(dank Stack Overflow ) weiterleiten , um die erforderliche Zeile dieser Ausgabe zu erhalten. Ein Beispiel:
mkdir foo
chflags hidden foo
ls -aOl foo | sed -n 2p
drwxr-xr-x@ 2 harry staff hidden 68 18 Aug 19:11 .
Bearbeiten 2: Für einen Befehl, der unabhängig davon funktionieren soll, ob es sich um eine Datei oder einen Ordner handelt, müssen wir etwas Hackigeres tun.
Die erforderliche Ausgabezeile von ls -al
hängt davon ab, ob es sich um eine Datei oder einen Ordner handelt, da Ordner eine Gesamtanzahl aufweisen, Dateien hingegen nicht. Um dies zu umgehen, können wir nach dem Charakter suchen r
. Dies sollte in ~ allen Dateien / Ordnern sein (fast alle sollten mindestens eine Leseberechtigung haben), aber nicht in der Summenzeile.
Da die Zeile, die wir erhalten möchten, zur ersten Zeile wird, können wir head -n 1
die erste Zeile verwenden (alternativ kann eine Alternative verwendet werden, wenn Sie sed bevorzugen sed -n 1p
).
Also zum Beispiel mit einem Verzeichnis:
mkdir foo
chflags hidden foo
ls -aOl foo | grep r | head -n 1
drwxr-xr-x@ 2 harry staff hidden 68 18 Aug 19:11 .
und mit einer Datei:
touch foo.txt
chflags hidden foo.txt
ls -aOl foo.txt | grep r | head -n 1
-rw-r--r-- 1 harry staff hidden 0 18 Aug 19:11 foo.txt
Edit 3: Siehe Tyilos Antwort unten für eine schönere Art als nach zu greifen r
:)
ls -Ol fooDir/ | grep hidden
), um nur versteckte Dateien / Ordner anzuzeigen. Dies zeigt immer noch alle Dateien an, aber wenn Sie es durch eine sed / awk-Magie leiten (ich fürchte, jemand anderes muss hier helfen), sollten Sie in der Lage sein, nur eine Liste von Dateien zu erhalten.-a
Option zu ls hinzu. Um nur die gewünschte Zeile aus der Ausgabe zu erhalten, können Sie sed verwenden. Zum Beispiel :ls -aOl foo | sed -n 2p
. Dies zeigt eine Ausgabezeile an. Wenn es das Wort "versteckt" enthält, ist foo versteckt. Wenn dies nicht der Fall ist, wird foo nicht ausgeblendet. :)ls -Old dirname/
wird Ihnen die Eigenschaften des Verzeichnisses selbst angezeigt, nicht dessen Inhalt.Die Lösung wurde hier gefunden: Wie kann ich festlegen, dass nur Informationen zu dem angegebenen Verzeichnis angezeigt werden, nicht Informationen zu den Unterdateien oder zum Ordnerinhalt?
Was im Grunde ist
ls -ldO foo
und dann fügen Sie einfach hinzu| awk '{ print $5 }'
, damit es die Informationen anzeigt.quelle
stat
.Wie durch referenzierte @Tyilo , @Sorpigal schlägt versucht
stat
, die codiert „User Flags“ mit%Xf
(er X Anwender codiert f Verzögerung), und für die Maschinen Parsing viel sicherer ist.Die Hex-Werte für Benutzerflags leben hier :
grep UF /usr/include/sys/stat.h
. Ab macOS 10.11:quelle