如何为每个用户生成文件夹所有权列表?

如何为每个用户生成文件夹所有权列表?

我想为 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

附注欲了解更多信息,请查看外壳循环

然而,这是一个非常糟糕的主意:您需要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

相关内容