В соответствии с man-страницей ls , вы должны иметь -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
зависит от того, является ли объект файлом или папкой, поскольку папки показывают общее количество, а файлы - нет. Чтобы обойти это, мы можем grep для персонажа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: См. Ответ Tyilo ниже для лучшего способа, чем поискать 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 закодированы пользователя ф лаг), и гораздо безопаснее для машинного анализа.Шестнадцатеричные значения для флагов пользователей живут здесь:
grep UF /usr/include/sys/stat.h
. Начиная с MacOS 10.11:источник