如何获取所有者:使用perl的文件/目录的组名?

时间:2016-12-23 12:18:58

标签: linux perl uid

在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

UPDATE2 :使用lstat,它可以正常工作!

1 个答案:

答案 0 :(得分: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