创建在给定目录中拥有文件的每个用户的列表以及他们拥有的文件和目录的数量

创建在给定目录中拥有文件的每个用户的列表以及他们拥有的文件和目录的数量

我无法理解代码:ls -l /projects/ghosttrail | tail -n +2 | sed 's/\s\s*/ /g' | cut -d ' ' -f 3 | sort | uniq -c。有人能给我详细解释每一步发生的事情吗?我知道我可以通过一一添加每个命令来自己完成,但是代码对我不起作用,而且我无法理解一些事情,例如尾部+2参数的含义,或者我们通过将 sed 命令和为什么我们不采用 cut 命令中的第四列。

来源:https://ryanstutorials.net/linuxtutorial/piping.php

答案1

管道的步骤,上一个命令的输出用作下一个命令的输入:

  1. ls -l /projects/ghosttrail列出目录内容(不以点开头)及其详细信息。

  2. tail -n +2输出从第 2 行开始(删除第一行)。没有+tail将显示最后两行(由 指定的行数-n,默认 10)。

  3. sed 's/\s\s*/ /g'将多个连续空格替换为单个空格。

  4. cut -d ' ' -f 3获取第三个字段(用户名)。

  5. sort | uniq -c对独特的行进行排序和计数。sort使用它是因为uniq不会检测重复的行,除非它们是相邻的,如中所述man uniq

使用 GNU 获得相同结果的另一种方法find

find . -maxdepth 1 -not -name '.*' -printf '%u\n' | sort | uniq

find-printf '%u\n'列出工作目录中的用户名(选项)。-maxdepth 1防止搜索子目录。-not -name '.*'不包括点文件。sort | uniq与原始示例具有相同的目的。

相关内容