我不明白-printf 脚本

我不明白-printf 脚本

我已接手 RHEL5 脚本编写工作,但我没有接受过任何有关此平台或 bash 脚本编写的培训。有一个脚本包含多个部分,我只会询问第二部分,但也会向您展示第一部分,因为我认为这将有助于解答我下面的问题。

脚本的第一部分显示特定服务器上用户的输出:

cut -d : -f 1 /etc/passwd

输出结果如下:

root
bin
joe
rob
other...

第二个脚本要求我填写上面脚本中列出的每个帐户并运行。从我收集的信息以及我在手册页和其他网络搜索中的搜索来看,它会查找文件或目录的组所有者,并显然会排序并挑选出唯一的记录,但不太确定 - 所以这就是我的问题,下面的脚本到底是做什么的?(有趣的是,如果我从上面的输出中插入每个名称,我有时会收到“找不到用户名等等”的消息。)

findusername-printf %G | sort | uniq

答案1

如果您查看find手册页,您会发现该选项的描述-printf

   -printf format
          True; print format on the standard output, interpreting `\' escapes
          and `%' directives...

如果您进一步查看手册页,您将找到以下文档%G

          %G     File's numeric group ID.

因此,这将查找目录中包含的所有文件username(在您的示例中),并打印出拥有这些文件的数字组 ID。这将通过管道传输到sort,这将按词汇顺序对它们进行排序。将结果通过sort管道传输到uniq,这将删除重复的条目。

因此,这将生成一个包含特定目录树中拥有文件的所有唯一组 ID 的列表。

按照写法,这不会完全实现这一点,因为没有分隔符。如果您有由组200和拥有的文件100,则输出将如下所示:

100200

...这意味着sort只会看到一行并且不会执行任何操作。

可以向格式字符串添加换行符来解决这个问题:

find username -printf '%G\n' | ...

相关内容