在 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 #
更新 :目前我几乎想通了, 只需要帮助,如果有符号链接(symbolic link),它将提供 root:root 。它应该给符号链接(symbolic link)的所有者:组!
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,它有效!
最佳答案
使用 stat
获取 uid/gid,并使用 getpwnam
/ getgrnam
将它们转换为名称。
如果涉及符号链接(symbolic link),您可能会通过使用 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
关于linux - 如何获得所有者 :group name of a file/directory with perl?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41305578/