Відповіді:
Відповідно до сторінки ls man , ви повинні мати можливість -O
комбінувати з -l
опцією для перегляду прапорів з ls. Наприклад:
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
Редагувати: Просто для того, щоб дати більш конкретне рішення того, що хотів ОП (див. Коментарі нижче): Щоб побачити, прихована чи ні папка, ми можемо передати -a
опцію ls для перегляду самої папки. Потім ми можемо передати висновок у sed -n 2p
(завдяки переповненню стека ), щоб отримати необхідний рядок цього виводу. Приклад:
mkdir foo
chflags hidden foo
ls -aOl foo | sed -n 2p
drwxr-xr-x@ 2 harry staff hidden 68 18 Aug 19:11 .
Редагування 2: Для команди, яка повинна працювати незалежно від того, чи це файл чи папка, нам потрібно зробити щось трохи більш хакі.
Необхідний рядок виводу ls -al
залежить від того, чи є справа файлом чи папкою, оскільки папки показують загальну кількість, тоді як файли - ні. Щоб обійти це, ми можемо поздоровитись за персонажем r
. Це має бути у ~ всіх файлах / папках (майже всі повинні мати принаймні один дозвіл на читання), але не у рядку підсумків.
Оскільки лінія, яку ми хочемо отримати, то стає першою лінією, ми можемо використовувати head -n 1
для отримання першого рядка (альтернатива, якщо ви віддаєте перевагу sed, sed -n 1p
може бути використана).
Так, наприклад, з каталогом:
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 .
і з файлом:
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
Редагувати 3: Дивіться відповідь Тиїло нижче про кращий спосіб, ніж привітання до r
:)
ls -Ol fooDir/ | grep hidden
), щоб переглянути лише приховані файли / папки. Це все ще покаже всі файли, але якщо ви передасте його через якусь магію sed / awk (боюся, хтось інший повинен допомогти тут), ви повинні мати можливість отримати лише список файлів.
-a
параметр до ls. Щоб просто отримати потрібну лінію з виводу, ви можете використовувати sed. Наприклад: ls -aOl foo | sed -n 2p
. Це покаже один рядок виводу. Якщо воно містить слово "прихований", то foo приховано. Якщо цього не відбувається, foo не приховано. :)
ls -Old dirname/
покаже вам властивості самого каталогу, а не його вміст.
Тут знайдено рішення: як я можу змусити ls показувати інформацію лише про вказаний каталог, а не інформацію про його під-файли чи вміст папки?
Що в основному є, ls -ldO foo
а потім ви просто додаєте, | awk '{ print $5 }'
щоб він відображав інформацію.
stat
.
Як посилається на @Tyilo , @Sorpigal пропонує спробувати stat
, який кодує "прапори користувачів" %Xf
(він X закодований користувач f lag), і набагато безпечніший для машинного розбору.
$ stat -f "%Xf" ~/Library
8000
Шістнадцяткові значення для прапорів користувачів живуть тут: grep UF /usr/include/sys/stat.h
. Станом на 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 */