UNIX/Linux/Mac OSX获取文件权限的数字表示方法

20
这应该很容易,但我完全不知道怎么做。我可以使用ls -la来查看文件的权限,会出现类似以下内容:
-rwxr-xr-x   1 james  staff   68  8 Feb 13:33 basic.sh*
-rw-r--r--   1 james  staff   68  8 Feb 13:33 otherFile.sh*

我该如何将其转换为数字以在chmod中使用,例如chmod 755 otherFile.sh(而不进行手动转换)。


2
只是一条提示,可能会让您的研究更容易:Mac OS X 是 BSD UNIX,任何 UNIX 解决问题的方法也可以。 (许多 Linux 方法也可以。) - Jesper
2个回答

32
在我的OS X 10.8版本中,stat -f "%Lp" [filename]对我有效。

奇怪的是,10.7版本中stat命令的手册看起来应该像在10.8版本中那样工作。你遇到了什么错误? - Patrick Lewis
1
嗯,这很奇怪,我以为你的答案是类似于:stat -c "%a %w" [filename],但它不起作用。不过你的答案确实有效。 - AJP
1
注意:对于Linux,请使用命令“stat -c '%a' [文件名]”。 - AJP

2
您应该使用 stat 命令,而不是 ls。从查看manpage,可以得到获取文件权限的结果。
for f in dir/*
do
    perms=$(stat -f '0%Hp%Mp%Lp' $f)
    echo "$f has permissions $perms"
done

(虽然我现在不在我的Mac旁边,因此无法测试它。)


@AJP,经过进一步研究手册,我认为您需要指定Hp、Mp和Lp以获取所有文件权限。请查看我的编辑。 - trojanfoe
是的,我的编辑只是为了表明我只想要755部分,这样我就可以将其与chmod一起使用,以更改读取、写入和执行权限。但是你的答案给出了完整的权限。 - AJP
@AJP 我不明白两个答案怎么都正确。 你是说 stat -f'% Hp%Mp%Lp' stat -f'% Lp' 给出相同的结果? - trojanfoe
不,它们会给出不同的结果,而stat -f '%Lp'才是我想要的。 - AJP
@AJP 哦,好的;昨晚我终于测试了一下 '%Lp',结果得到了 005 - trojanfoe
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接