判断文件夹/文件是否在Mac OS X中隐藏


10

我知道你可以设置或取消设置做一个文件夹/文件的隐藏标志chflags hidden foo.txtchflags nohidden foo.txt

但是,有没有办法告诉您该文件夹/文件当前是否处于隐藏状态?

我不想只是确定文件夹/文件是否以点开头。

Answers:


10

根据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

编辑:只是为了给OP想要一个更具体的解决方案(请参阅下面的注释):要查看文件夹是否被隐藏,我们可以将-a选项传递给ls来查看文件夹本身。然后,我们可以将输出通过管道传递到sed -n 2p(感谢Stack Overflow)以获取该输出的所需行。一个例子:

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:比grepping更好的方法,请参见下面的Tyilo答案r:)


但是使用文件夹执行此操作,将列出其下文件/文件夹的标志
Tyilo

要仅查看隐藏的文件,请通过grep(例如ls -Ol fooDir/ | grep hidden)将其通过管道传输,以仅查看隐藏的文件/文件夹。它仍然会显示所有文件,但是如果您通过sed / awk魔术将其通过管道传输(恐怕其他人会在这里帮助您),您应该只能得到文件列表。

我不想知道文件夹“ foo”是否隐藏的文件列表
Tyilo 2011年

好。因此,要查看目录本身,请-a在ls中添加选项。要仅从输出中获得所需的行,可以使用sed。例如:ls -aOl foo | sed -n 2p。这将显示一行输出。如果它包含单词“ hidden”,则foo被隐藏。如果不是,则不隐藏foo。:)

2
使用ls -Old dirname/将显示目录本身的属性,而不是目录的内容。
bahamat 2011年


1

如通过引用@Tyilo@Sorpigal建议尝试stat,其编码“的标志位”与%Xf(他X编码的用户˚F滞后),并且是用于机器解析安全得多。

$ 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 */
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.