Odpowiedzi:
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.
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.
$ stat -f "%Xf" ~/Library
8000
Wartości szesnastkowe dla flagi użytkowników żyć tutaj: grep UF /usr/include/sys/stat.h
. Począwszy od systemu macOS 10.11:
#define UF_SETTABLE 0x0000ffff /* mask of owner changeable flags */
#define UF_NODUMP 0x00000001 /* do not dump file */
#define UF_IMMUTABLE 0x00000002 /* file may not be changed */
#define UF_APPEND 0x00000004 /* writes to file may only append */
#define UF_OPAQUE 0x00000008 /* directory is opaque wrt. union */
/* #define UF_NOUNLINK 0x00000010 */ /* file may not be removed or renamed */
#define UF_COMPRESSED 0x00000020 /* file is hfs-compressed */
/* UF_TRACKED is used for dealing with document IDs. We no longer issue
notifications for deletes or renames for files which have UF_TRACKED set. */
#define UF_TRACKED 0x00000040
#define UF_HIDDEN 0x00008000 /* hint that this item should not be */