ユーザーが所有するフォルダを探す[閉じる]

ユーザーが所有するフォルダを探す[閉じる]

共有フォルダが複数あり、ユーザーがそこに複数のフォルダを持っていることを確認する必要があります。たとえば、

/shared/release/
/shared/compile/
/shared/tags/
/shared/general/

これらのフォルダを一覧表示し、ユーザーが2つ以上のフォルダを所有していることを知らせるbashスクリプトが必要です。

Bashを使用してこれらのフォルダのリストを取得し、ユーザーが複数のフォルダを所有していることを確認するにはどうすればよいですか?

答え1

使用find:

find /shared -mindepth 1 -maxdepth 1 -type d -user <username>

<username>探している実際のユーザー名に置き換えます。

  • -maxdepth 1再帰巡回を防ぎます。つまり、/sharedディレクトリだけを見てください。

  • -mindepth 1/shared所有している場合、ディレクトリ自体はリストされません<username>。この動作を望まない場合は、このオプションを削除してください。

  • -type dディレクトリにのみ興味があることを示します。

  • -user <username><username>所有しているファイル(ディレクトリ)を探していることを示します。

答え2

これにより、どのユーザーが複数のディレクトリを所有しているかが表示されます。

find /shared -type d -printf '%u\n' | sort | uniq -dc

findこれにはGNUサポートが必要です-printf。あなたのCentOSにはこれがあります。

これにより、複数のディレクトリとそのディレクトリを持つユーザーが一覧表示されます。

find /shared -type d -printf '%u %p\0' | awk '{c[$1]++; a[$1]=a[$1](a[$1]?"\n  ":"")$0} END{for (user in c) if (c[user]>1) print c[user],a[user]}' RS="\0"

柔軟性を最大化するために、NULで区切られた出力を使用してくださいfind。これには、NUL区切り入力をサポートするGNU awkまたは最新バージョンのmawkが必要です。 CentOSを使っているので大丈夫です。

どのように動作しますか?

  • find /shared -type d -printf '%u %p\0'

    これは、findにNULで区切られたリストで/shared所有者%uとディレクトリ名を見つけて印刷するように指示します。%p

  • awk '{c[$1]++; a[$1]=a[$1](a[$1]?"\n ":"")$0} END{for (user in c) if (c[user]>1) print c[user],a[user]}' RS="\0"

    これにより、各ユーザーが所有するディレクトリの数が計算され、複数のディレクトリを所有しているユーザーのレポートが印刷されます。もっと詳しく:

    • c[$1]++最初の入力フィールドで指定されたユーザー数を増やします。

    • a[$1]=a[$1](a[$1]?"\n ":"")$0}このユーザーに対して見つけた各ディレクトリの名前を保存します。

    • END{for (user in c) if (c[user]>1) print c[user],a[user]}レポートを印刷してください。

    • RS="\0"awkNULで区切られた入力を使用するように指示します。これにより、ディレクトリ名に改行やその他の難しい文字が含まれていてもプロセスが安全になります。

関連情報