又进行了如下考试测验:
find ./ -name \"大众.txt\公众 | xargs ls -l | awk -F \"大众 \"大众 '{ans+=}END{print ans}'
find ./ -name \公众.txt\"大众 -exec ls -l {} \;| awk -F \公众 \公众 '{ans+=$5}END{print ans}'

创造若.txt文件存在的情形下,两者实行结果相同,但如果.txt文件不存在,xargs ls -l返回的是当前目录列表,-exec ls -l {} \;没有任何返回。
还有一种利用命令更换的办法:
ls -l `find ./ -name \公众.txt\公众` | awk -F \"大众 \"大众 '{ans+=$5}END{print ans}'
实行结果与xargs ls -l相同。
问题来了:利用|管道、xargs、以及find中的-exec有啥差异?
一点知识
管道将前一个命令的输出作为标准输入传给后面的命令,不会用到任何中间文件与缓冲区。
xargs将前一个命令的输出作为命令行参数传给后面的命令。
由此可见,类似于ls这种只能读取命令行参数的命令,只能利用xargs来进行输出通报。
-execfind命令中-exec参数将查询结果通过命令行参数通报给后面的命令。
-exec与xargs不同的是:-exec是将结果逐条通报给后面的命令,后面的命令逐条实行。xargs是将结果作为一个列表全部通报给后面的命令,后面的命令一次性实行参数串,可以通过xargs -p ls -l来查看即将要实行的完全的命令。
Tips:目前已知的只能读取命令行参数的命令有:ls、rm。
通过剖析-exec与xargs的不同,就会创造如果在find中利用-exec+ls -lrt的办法,列表并没有进行排序,若想要排序,可利用xargs+ls -lrt,不过要把稳-exec与xargs差异
find ./ -name \"大众log\"大众 -exec ls -lrt {} \; --rt无效
find ./ -name \"大众log\"大众 | xargs ls -lrt --rt有效