ディレクトリまたはファイルの所有者を検索し、その所有者のみを返し、他のものは返しません。

ディレクトリまたはファイルの所有者を検索し、その所有者のみを返し、他のものは返しません。

私はディレクトリの所有者だけを返すコマンドを探しています。ls -latコマンドを解析する正規表現またはそれに似ていますか?他のスクリプトで結果を使用したいと思います。

答え1

stat ~からGNUコアツール次のことができます。

stat -c '%U' /path/of/file/or/directory

残念ながら、バージョンが多く、stat構文に一貫性があまりありません。たとえば、FreeBSD では次のようになります。

stat -f '%Su' /path/of/file/or/directory

移植性が問題であれば、おそらく以下を使用する方が良いでしょう。クエリアドバイスlsとの組み合わせは、awk1つではなく2つのプロセスを開始する必要がありますが、POSIX標準機能のみを使用するという利点があります。

ls -ld /path/of/file/or/directory | awk '{print $3}'

答え2

解析された出力lsは良い考えではありません。実際には、すべての「伝統的な」ユニスで動作する最初のいくつかのフィールドを取得することを除いて、ユーザー名にスペースを許可するWindows実装など、一部のプラットフォームでは機能しません。

ls -ld /path/to/directory | awk 'NR==1 {print $3}'

別のオプションはコマンドを使用することですが、statシェルの問題は、異なる構文を持つ複数のコマンドがあるため、シェルスクリプトから移植できないことです(Linuxインストール全体でも)。statstat

特定のユーザーが所有者であるかどうかをテストするのは別の提案です。

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

答え3

GNUを使用してこれを行うこともできますfind

find "$directoryname" -maxdepth 0 -printf '%u\n'

これは、GNUシステムの外部では移植可能ではありませんが、Linuxディストリビューションでは機能しないという事実に驚きました。

答え4

ls -ld /path/to/file/or/directory | cut -d' ' -f3

関連情報