使用 stat 以八进制获取文件模式(BSD vs GNU)

Get file mode in octal with stat (BSD vs GNU)

我正在尝试获取八进制的文件位,以评估路径是常规文件还是目录。

这在 BSD stat 中非常有效,它是我 macOS:

的一部分
$ stat -f %Op /tmp/test.txt 
100644

如何从 GNU 获得 stat 中相同(或相似)的结果。我得到的最好的是:

$ stat -c "%a" /tmp/test.txt
644
$ stat -c "%A" /tmp/test.txt
-rw-r--r--

现在,我看到的唯一方法是解析字符串结果并检查第一个字符是 - 还是 d.

GNU stat%f 格式代码。不幸的是,它以十六进制显示原始模式,因此您必须使用例如shell 的转换工具。

另请注意,格式是用 -c 指定的。

printf '%06o\n' 0x$(stat -c '%f' /tmp/test.txt)

详情请参考man page.