如何使用Perl获取文件/目录的所有者和组名称?

3

在Linux和AIX上,有一种很好的方法来输出权限:

0:root@SERVER:/root # perl -e 'printf "chmod %04o %s\n", (stat)[2] & 07777, $_ for @ARGV' /home      
chmod 0755 /home
0:root@SERVER:/root #

但如何输出所有者:群组?例如:
0:root@SERVER:/root # perl SOMEMAGIC /home
chown bin:bin /home
0:root@SERVER:/root #

更新:目前我几乎弄清楚了,只需要帮助解决符号链接的问题,它会给出root:root,而应该是符号链接的所有者和组!

perl -e '$uid = (stat)[4], $_ for @ARGV; $owner = getpwuid($uid); $gid = (stat)[5], $_ for @ARGV; $group = getgrgid($gid); print "chown $owner:$group \"@ARGV\"\n"' FILENAMEHERE

更新2:使用lstat,它可以工作!

1个回答

8

使用stat函数获取uid/gid,使用getpwnam/getgrnam函数将其转换为名称。

如果涉及符号链接,则最好使用lstat而不是stat以获得更好的结果:

perl -e '$uid = (lstat)[4], $_ for @ARGV; $owner = getpwuid($uid); $gid = (lstat)[5], $_ for @ARGV; $group = getgrgid($gid); print "chown $owner:$group \"@ARGV\"\n"' FILENAMEHERE

我试图自己解决这个问题,Q已更新,有什么提示吗? :) - pepite
谢谢!正在更新您的答案。 - pepite

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