ディレクトリの所有者を返すコマンドを探していますが、それだけです-ls -lat
コマンドを解析する正規表現などのようなものですか?結果を別のスクリプトで使用したい。
stat
GNU coreutils からこれを行うことができます:
stat -c '%U' /path/of/file/or/directory
残念ながら、stat
にはいくつかのバージョンがあり、構文には多くの一貫性がありません。たとえば、FreeBSDでは、
stat -f '%Su' /path/of/file/or/directory
移植性が気になる場合は、おそらくls
とawk
を組み合わせて Gillesの提案 を使用する方が良いでしょう。 1つではなく2つのプロセスを開始する必要がありますが、POSIX標準機能のみを使用するという利点があります。
ls -ld /path/of/file/or/directory | awk '{print $3}'
ls
の出力を解析することはめったにありません ですが、最初のいくつかのフィールドを取得することは例外であり、実際にはすべての「従来の」ユニスで機能します(プラットフォームでは機能しません)ユーザー名にスペースを許可する一部のWindows実装など)。
ls -ld /path/to/directory | awk 'NR==1 {print $3}'
別のオプションはstat
コマンドを使用することですが、シェルからのstat
の問題は、構文が異なる複数のコマンドがあるため、シェルスクリプトのstat
は移植できないことです(Linuxインストール全体でも)。
特定のユーザーが所有者であるかどうかをテストすることは別の命題であることに注意してください。
if [ -n "$(find . -user "$username" -print -Prune -o -Prune)" ]; then
echo "The current directory is owned by $username."
fi
if [ -n "$(find . -user "$(id -u)" -print -Prune -o -Prune)" ]; then
echo "The current directory is owned by the current user."
fi
GNU findでこれを行うこともできます:
find $directoryname -maxdepth 0 -printf '%u\n'
これはGNUシステムの外では移植できませんが、それが機能しないLinuxディストリビューションを見つけて驚いています。
純粋なbashでは、ls
の出力を配列に変換し、それにインデックスを付けることができます。
# (lrwxr-xr-x, 1, myuser, staff, 36, Oct, 21, 16:36, /path/to/file)
file_meta=($(ls -ld /path/to/file))
file_owner="${file_meta[2]}" # myuser
stat
、find
、またはawk
を使用するほどエレガントではありませんが、ピンチで機能する可能性があります。