There is a great method to output permissions on Linux and 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 #
But how to output owner:group? ex.:
0:root@SERVER:/root # perl SOMEMAGIC /home
chown bin:bin /home
0:root@SERVER:/root #
UPDATE: currently I almost figured it out, only help needed that if there is a symlink, it will give root:root. It should give the owner:group of the symlink!
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: with lstat, it works!
Use
stat
to get the uid/gid, andgetpwnam
/getgrnam
to convert those into names.If symlinks are involved you might get better results by using
lstat
instead ofstat
: