小智 11
根据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
Run Code Online (Sandbox Code Playgroud)
编辑:只是为 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 .
Run Code Online (Sandbox Code Playgroud)
编辑 2:对于一个无论是文件还是文件夹都应该有效的命令,我们需要做一些更hacky 的事情。
所需的输出行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 .
Run Code Online (Sandbox Code Playgroud)
并带有一个文件:
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
Run Code Online (Sandbox Code Playgroud)
编辑 3:请参阅下面的 Tyilo 答案,以获得比 grepping 更好的方法r:)
在这里找到了解决方案:如何使 ls 仅显示有关指定目录的信息,而不是有关其子文件或文件夹内容的信息?
基本上是这样ls -ldO foo,然后您只需附加| awk '{ print $5 }'以使其显示信息。