*和管道之间的区别

伊夫

说我要检查某个目录中每个文件的大小。

这是我的工作:

du -sh *

另外,我可以这样做:

ls | xargs du -sh

这两个命令执行完全相同的操作。

我想知道它们是否完全相同,例如它们的成本,效率等。(我猜第一个命令比第二个命令轻吗?)

斯蒂芬·基特

一个是正​​确的,另一个是不正确的。

du -sh *

(应du -sh -- *避免以开头的文件名出现问题-

依靠壳扩大球*; du将当前目录中的所有非隐藏文件和目录视为单独的参数。这样可以正确处理特殊字符。

ls | xargs du -sh

依赖于xargs处理ls的输出。xargs在空格(至少空格,制表符和换行符,在某些实现中更多)上拆分其输入,还理解某种形式的引用,并du使用每个由空格分隔的单个字符串运行(一个(即使是空输入¹)或更多次调用)个别论点。

如果当前目录中不包含名称中包含空格,单引号,双引号或反斜杠字符的文件,并且文件数量很少(但至少有一个)xargs仅运行一次du调用,则两者都看起来相同不是。

就效率而言,du -sh *使用一个过程,ls | xargs du -sh至少使用三个过程。有一个场景,其中所述管的方法将工作,而水珠不会:如果你在当前目录下的文件太多,外壳将无法运行du在一个全力以赴自己的名字,而是xargs将运行du作为覆盖所有文件所需的时间很多次,在这种情况下,您会看到几行,并且具有多个硬链接的文件可能会被计算多次。

另请参见为什么*不*解析`ls`?


¹如果当前目录中没有未隐藏的文件,du -sh -- *则可能由于您的shell错误而失败,或者由于某些shell(例如以文字作为参数bash运行)du失败,*du会抱怨该*文件不存在。

使用时ls | xargs du -sh --,大多数xargs实现(某些BSD除外)将du不带任何参数运行,因此给出当前目录的磁盘使用情况(因此还包括目录文件本身及其中所有隐藏文件和目录的磁盘使用情况)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

IIS7中“经典”和“集成”管道模式之间有什么区别?

http://和//之间的区别

pty和管道之间的区别

层与管道和过滤器之间的区别?

HTTP / 1.1管道传输和HTTP / 2复用之间有什么区别?

之间的区别 和|| 或&和&&

什么是资产管道插件和资源插件?它们之间有什么区别?

在Jenkins管道步骤中运行shell脚本方面,“”和“”之间有什么区别?

在Powershell中Export-Csv中使用和不使用管道之间的区别

buildflow,multijob和管道插件之间的区别

<%#..%>和<%#:..%>之间的区别?(冒号)

Azure管道-管道工件和构建工件之间有什么区别?

Azure DevOps中的构建管道和发布管道之间有什么区别?

气流和Kubeflow管道之间有什么区别?

ADF管道和ADF数据流之间有什么区别?

如何在Azure DevOps管道中获得主分支和请求请求之间的区别?

管道和流之间到底有什么区别?

File :: Tee和打开“ tee”管道之间有什么区别吗?

做猫和只做管道之间有什么区别

Shell内置,函数,管道和命令列表上的保留字和命令“时间”之间的区别?

MySql Workbench-“本地实例3306”和“通过管道的本地主机”之间的区别?

管道与命令扩展之间的区别

如何将字符串正确写入命名管道以及echo和printf之间的区别

–和-或'和'或“和”之间的区别

VHDL中管道和rising_edge之间的区别?

PDAL 管道和区别

处理命名管道时,fish shell 和 bash 之间有什么区别?

管道系统调用和读/写标准输入/输出之间的区别

as和let之间的异步管道区别