所以我在C中用一个程序来模拟shell中的管道命令,但我对此感到困惑。我知道它在我的目录中搜索某些内容,对其进行排序并将其广告到file.txt,但我不知道它搜索的是什么。
find . -type f -ls | cut -c 2- | sort -n -k 7 >file.txt ; less <file.txt
有人可以告诉我它的作用吗?
答案 0 :(得分:1)
find . -type f
搜索当前目录中的常规文件(.
表示当前目录)或任何子目录,-ls
只是以与ls
相同的格式打印结果。 cut -c 2-
从find
的输出中删除2个第一个字符,然后以数字方式对其进行排序并输入到文件中,然后使用less
读取该文件。 唷
答案 1 :(得分:1)
find . -type f -ls | cut -c 2- | sort -n -k 7 >file.txt ; less <file.txt
这是一个非常奇怪的命令。你确定你已正确复制它吗?它来自哪里?
我建议分解命令,通过less
管道部分版本的输出,这样你就可以看到发生了什么。 (当然,如果你还没有,你应该阅读所有相关的手册页。)
find . | less
find . -type f | less
find . -type f -ls | less
find . -type f -ls | cut -c 2- | less
...
或者使用head
而不是less
,这样您就可以看到输出的前几行。
find . -type f
以递归方式查找当前目录('.'
)下的所有普通文件。 -ls
选项告诉它为每个文件显示一行,格式与ls -l
生成的格式类似。
find ... -ls
的输出以数字inode编号开头。该号码可能印有前导空格。
cut -c 2-
删除less
输出的每一行的前两个字符。我不知道你为什么要那样做。我怀疑这个想法是确保在行的开头没有空格,但这不是一个可靠的方法。如果inode数量恰好足够小,则可能有三个或更多前导空格。这样做会更好sed 's/^ *//'
- 但它甚至没有必要。
sort -n -k 7
在第7个空白分隔字段上进行数字排序,该字段恰好是文件的字节大小。所以这是根据文件的大小对列表进行排序,从最小到最大。我想,之前的cut
命令是为了确保大小是第7个字段,即使原始行以空格开头,但这不是必需的(除非它可能是sort
的版本行为有点不同)。
输出将写入file.txt
,然后使用less <file.txt
进行查看。 <
是愚蠢的; less
完全能够从命令行中命名的文件中读取,因此less file.txt
可以正常工作。显然用户想要保存输出;否则将sort
的输出传递给less
会更有意义。 tee
命令在这里也很有用:find ... | tee file.txt | less
。
find ... -ls
的输出与ls -l
的输出一样,是人类可读的;用于自动文本处理的不。从一个实现到另一个实现可能略有不同。有一些方法可以产生更多的常规输出。如果你有GNU find
,它有一个-printf
选项,可以让你指定完全它打印的信息,以及按什么顺序。
答案 2 :(得分:0)
找人
Man cut
男子排序
男人少