私はディレクトリの所有者だけを返すコマンドを探しています。ls -lat
コマンドを解析する正規表現またはそれに似ていますか?他のスクリプトで結果を使用したいと思います。
答え1
stat -c '%U' /path/of/file/or/directory
残念ながら、バージョンが多く、stat
構文に一貫性があまりありません。たとえば、FreeBSD では次のようになります。
stat -f '%Su' /path/of/file/or/directory
移植性が問題であれば、おそらく以下を使用する方が良いでしょう。クエリアドバイスls
との組み合わせは、awk
1つではなく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インストール全体でも)。stat
stat
特定のユーザーが所有者であるかどうかをテストするのは別の提案です。
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