Zgodnie ze stroną podręcznika ls , powinieneś być w stanie -O
połączyć opcję z -l
opcją przeglądania flag za pomocą ls. Na przykład:
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
Edycja: aby podać bardziej szczegółowe rozwiązanie tego, czego chciał OP (patrz komentarze poniżej): Aby sprawdzić, czy folder jest ukryty, możemy przekazać -a
opcję ls, aby wyświetlić sam folder. Możemy następnie przesłać dane wyjściowe do sed -n 2p
(dzięki przepełnieniu stosu ), aby uzyskać wymagany wiersz tego wyniku. Przykład:
mkdir foo
chflags hidden foo
ls -aOl foo | sed -n 2p
drwxr-xr-x@ 2 harry staff hidden 68 18 Aug 19:11 .
Edycja 2: Dla polecenia, które powinno działać niezależnie od tego, czy jest to plik, czy folder, musimy zrobić coś nieco bardziej zhackowanego.
Wymagana linia danych wyjściowych ls -al
różni się w zależności od tego, czy rzecz jest plikiem, czy folderem, ponieważ foldery pokazują całkowitą liczbę, podczas gdy pliki nie. Aby obejść ten problem, możemy pozdrowić postać r
. Powinno to znajdować się w ~ wszystkich plikach / folderach (prawie wszystkie powinny mieć co najmniej jedno uprawnienie do odczytu), ale nie w wierszu sum.
Ponieważ linia, którą chcemy uzyskać, staje się pierwszą linią, możemy użyć, head -n 1
aby uzyskać pierwszą linię ( można użyć alternatywnej opcji, jeśli wolisz sed sed -n 1p
).
Na przykład z katalogiem:
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 .
i z plikiem:
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
Edycja 3: Zobacz odpowiedź Tyilo poniżej dla lepszego sposobu niż szukanie r
:)
ls -Ol fooDir/ | grep hidden
), Aby wyświetlić tylko ukryte pliki / foldery. Nadal będą wyświetlać wszystkie pliki, ale jeśli przepuścisz je przez magię sed / awk (obawiam się, że ktoś inny będzie musiał ci pomóc), powinieneś być w stanie uzyskać tylko listę plików.-a
opcję do ls. Aby uzyskać potrzebną linię z wyjścia, możesz użyć sed. Na przykład:ls -aOl foo | sed -n 2p
. Spowoduje to wyświetlenie jednego wiersza wyniku. Jeśli zawiera słowo „ukryty”, to foo jest ukryty. Jeśli nie, foo nie jest ukryty. :)ls -Old dirname/
spowoduje wyświetlenie właściwości samego katalogu, a nie jego zawartości.Znalazłem rozwiązanie tutaj: Jak sprawić, aby ls wyświetlał informacje tylko o określonym katalogu, a nie informacje o jego podfolderach lub zawartości folderów?
Co w zasadzie jest,
ls -ldO foo
a następnie dodajesz,| awk '{ print $5 }'
aby wyświetlać informacje.źródło
stat
.Jak wskazuje @Tyilo , @Sorpigal sugeruje próbowanie
stat
, które koduje „flagi użytkownika” za pomocą%Xf
(on koduje X użytkownika f lag) i jest znacznie bezpieczniejsze dla parsowania maszynowego.Wartości szesnastkowe dla flagi użytkowników żyć tutaj:
grep UF /usr/include/sys/stat.h
. Począwszy od systemu macOS 10.11:źródło