如何编写 shell 管道来打印目录中所有子文件的组所有者?

如何编写 shell 管道来打印目录中所有子文件的组所有者?

我需要知道特定目录中文件的组所有者,包括其子目录中的文件。

答案1

您不需要 shell 管道来实现这一点 -find命令的-printf操作可以输出组信息:

  %g     File's group name, or numeric group ID if the group has no name.

%p如果您还想要文件名,请添加:

find path/to/dir/ -type f -printf '%g %p\n'

同样的事情,但使用外部stat命令:

find path/to/dir/ -type f -exec stat -c '%G %n' {} +

答案2

只需使用预制命令。

sudo apt-get install tree

tree -g /the/directory

在此处输入图片描述

手册页中的其他有用选项man tree

答案3

使用find 正如@steeldriver 的回答是最好的解决方案,但如果您必须使用管道,则可以使用以下命令:

ls -l -R /path/to/dir | grep ^- | awk '{print $4}'
  • -l告诉ls使用长列表格式并-R列出里面的所有子目录/path/to/dir

  • 然后将输出通过管道传输到,grep因此我们仅通过匹配以-( ^-) 开头的行来选择文件。

  • 最后,输出通过管道传输awk,我们只打印第四个字段($4),即组字段。

如果还需要打印文件名,可以使用以下命令:

ls -l -R /path/to/dir | grep ^- | awk '{$1=$2=$3=$5=$6=$7=$8=""; print $0}'

相关内容