如何使用 perl 获取 file/directory 的 owner:group 名称?
How to get owner:group name of a file/directory with 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 #
UPDATE:目前我几乎想通了,只需要帮助,如果有符号链接,它会给出 root:root.它应该给出符号链接的 owner:group!
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,它有效!
在 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 #
UPDATE:目前我几乎想通了,只需要帮助,如果有符号链接,它会给出 root:root.它应该给出符号链接的 owner:group!
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,它有效!