2016-12-23 40 views
3

有一個偉大的方法輸出權限在Linux和AIX:如何獲得所有者:文件/目錄的組名與Perl?

0:[email protected]:/root # perl -e 'printf "chmod %04o %s\n", (stat)[2] & 07777, $_ for @ARGV' /home  
chmod 0755 /home 
0:[email protected]:/root # 

但如何輸出業主:組?例:

0:[email protected]:/root # perl SOMEMAGIC /home 
chown bin:bin /home 
0:[email protected]:/root # 

UPDATE:目前我幾乎想通了,只需要幫助,如果有一個符號,它會給根:根。它應該給所有者:符號鏈接組!

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,它的作品!

回答

9

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

試圖找出自己,Q更新,對於任何暗示? :) – pepite

+0

兩天前我已經更新了答案! – Henrik

+0

謝謝!更新你的答案 – pepite

相關問題