如何获得所有者:与Perl的文件/目录的组名称?

在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 # 

但是如何输出owner:group? 例:

 0:root@SERVER:/root # perl SOMEMAGIC /home chown bin:bin /home 0:root@SERVER:/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,它的工作原理!

使用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