各ユーザーのフォルダの所有権リストを生成するには?

各ユーザーのフォルダの所有権リストを生成するには?

Ubuntuの各ユーザーに対して複数の別々のリストを作成したいと思います。リストには、各ユーザーに属するファイルとフォルダが含まれています。

システムのすべてのユーザーを一覧表示するには、次のコマンドを使用します。

cat /etc/passwd | awk -F: '{print $1;}'

「user1」が最初の結果であると仮定すると、私が得たいリストは次のようになります。

find / -user "user1" > user1.txt

だから私の質問は、できるだけ少ない数のコマンドを使用してすべてのリストを取得する方法です。よろしくお願いします。

答え1

getent passwd | cut -d: -f1 | while read USER ; do
  echo $USER #use this to show some kind of progress otherwise delete this string
  find / -user $USER > ${USER}.txt 2>/dev/null
done

PS:詳細については、以下を確認してください。シェルループ

しかし、これは非常に悪い考えです。findユーザー数だけファイルシステム全体で実行する必要があります。

私たちはよりスマートになり、他の方法で作業を行います。find一度だけ実行し、出力を次のファイルに分割します。

find / -printf "%u %p\n" | awk '{print $2 > $1".txt"}'

答え2

少なくともGNU findには、-fprint次のイディオムを使用してファイルシステムを一度だけ通過することで目的を達成するためのバリエーションがありますfind path -user user1 -fprint user1.txt

まず生成し-user-fprintパラメータを指定します。

findargs=""
for user in $(cut -d: -f1 /etc/passwd); do
  if [[ -z $findargs ]]; then
    findargs="-user $user -fprint $user.txt";
  else 
    findargs="$findargs -or -user $user -fprint $user.txt"
  fi
done

これでファイルシステムを解析する準備が整いました。

find path/to/parse $findargs

関連情報