題 shell腳本 - 如何輸出文件的所有者


是否有輸出文件所有者的命令,沒有別的?我想我可以用 ls 並運行它 sed,但如果有更好的方法,我肯定會使用它。


3
2017-12-20 20:22


起源


你經常需要嗎?您可以創建一個lttle perl腳本甚至一個小程序來返回給定文件名的特定信息。 - ott--
@ott我可以...但那不太便攜(?)。我更喜歡使用計算機上已有的程序,而不是自己編譯程序。 - BenjiWiebe
@BenjiWiebe:Perl往往非常便攜。你可以用類似的東西 for my $file (@ARGV) {$uid = (stat $file)[4]; $name = (getpwuid $uid)[0]; print "$name\n"} 要么 print map {"$_\n"} map {(getpwuid $_)[0]} map {(stat $_)[4]} @ARGV (無論哪個看起來更好) - grawity
@grawity Perl並沒有安裝到任何地方......但是給我看一個沒有的Linux系統 stat 和 bash/sh 安裝。 - BenjiWiebe
@BenjiWiebe:我可以向您展示一些使用的BSD系統 完全不同的選擇 對於 stat。 - grawity


答案:


stat -c %U file.txt

ls 是一種交互式查看文件信息的工具。它的輸出格式適合人類,並會導致腳本中的錯誤。 使用 globs 要么 find 代替。理解原因: http://mywiki.wooledge.org/ParsingLs


6
2017-12-20 20:48



非常感謝。我喜歡jilliagre的功能,但我想要一個命令來完成它而不解析另一個命令的輸出。 - BenjiWiebe
甜蜜,一個新的終端命令玩!我從來不知道stat命令,但我現在會以我能想到的各種方式濫用它。 - Llamanerds


我會使用該功能:

lso() { ls -dl ${1:?usage: lso file} | awk '{print $3;exit}'; }

編輯:

  • 我想過 stat 但我盡量避免使用任何非標準的東西。當你的問題標記為linux時,我堅持使用可移植的東西(即POSIX)  unix,而不僅僅是linux stat 非常標準..

  • 由於這個問題引發了關於有效用戶名的討論,因此這些也被Unix標准定義為由該列表中的字符組成的字符串:

A B C D E F G H I J K L M N O P Q R S T U V W X Y Z.

a b c d e f g h i j k l m n o p q r s t u v w x y z

0 1 2 3 4 5 6 7 8 9。 _ -

對連字符的附加限制不是第一個字符。

我假設沒有空間被允許。就像其他任何不可移植的東西一樣,這不僅會導致我的小功能,還會導致許多Unix / Linux CLI實用程序出現意外結果。


1
2017-12-20 20:31



可能工作得很好,直到你有一個可能有空格的用戶名...... - a CVn
@MichaelKjörling在Fedora 17上: sudo adduser "foo bar" 輸出 adduser: invalid user name 'foo bar' 但如果你嘗試“foobar”(沒有空格),它可以正常工作。因此,空格在用戶名中無效。 - BenjiWiebe
問題在哪裡甚至指定Linux?我看到了 unix 標籤以及...... - a CVn
@MichaelKjörling標題開頭是“linux - shell script -...”。當然,還有linux標籤。 - BenjiWiebe
@BenjiWiebe:太空 是 在用戶名中有效,無論如何 adduser 對他們說。事實上,它們通常用於加入MS Active Directory域的Linux系統。 - grawity