ファイル所有者の検索

ファイル所有者の検索

Bashスクリプトからファイル所有者を返す方法を探しています。 「gawk」を使えば可能だと思いますが、正直なところ糸口もなく、オンラインで投稿された理解できる答えもないようです。

答え1

これに使用されますstat

GNUシステムでは:

  • 所有者のユーザー名を取得するには:

    stat -c '%U' file.txt
    
  • 所有者のユーザーID(UID)を取得するには:

    stat -c '%u' file.txt
    

ファイルがfile.txt


FreeBSDとMac OS Xで利用可能(@casありがとうございます):

  • ユーザー名:

    stat -f '%Su' file.txt
    
  • UIDの場合:

    stat -f '%u' file.txt
    

答え2

ls -l foo

フィールド#3は所有者、フィールド#4はグループです。したがって:

set -- $(ls -l foo) ; echo $3

しかし、統計資料できればもっといいと思います。

答え3

zshシェルにはモジュールに独自の組み込みコマンドがあることに注意してくださいstat(そしてGNUとBSDが独自のコマンドを追加する前にそのコマンドがありました)zsh/stat

zmodload zsh/stat
stat +uid file

シンボリックリンクの確認済み所有者uidを出力しますfile。シンボリックリンクの場合、最終的にファイルではなくシンボリックリンクの所有者を確認するには、この-Lオプションを追加します(statalstat()ではなくa stat())。

-sユーザー名に翻訳するオプションを追加しますuid。そのuidに複数のユーザー名があると報告されますgetpwuid()。 uid にユーザー名がない場合、uid は翻訳されていません。

GNU coreutilsstatコマンドが追加される前に、GNUは述語を介してこれを実行findできました。-printf

find file -prune -printf '%U\n'

uidを一致するユーザー名に変換することで%U置き換えられました。シンボリックリンクに沿って最終ターゲットの所有者を取得するオプションが%u追加されました。-H

POSIXlyでは、次に頼る必要がありますls

LC_ALL=C ls -nd file | LC_ALL=C awk '{print $3; exit}'

-nuidをユーザー名に変換することで置き換えます-l(ユーザー名にスペースやタブが含まれていないと仮定)。-Lシンボリックリンクをたどるオプションを追加します。

関連情報