使用-v(详细)会降低命令速度吗?


34

在这个问题中:如何在不删除bash目录的情况下删除目录中的所有文件和子目录?询问如何删除文件夹中的所有文件,而不是文件夹本身。

Matt的出色答案包括对'rm'命令使用-v标志。

rm -rfv dontDeleteMe && mkdir dontDeleteMe

我剩下的命令就是上面的命令。确实确实有用,但是'rm'中的-v标志和/或通常是否减慢了通过命令行完成的任务?

我有一个包含.txt文件的文件夹(大约有100.000),我现在已经为自己创建,删除和重新创建了几次。有时使用rm,有时使用filebrowser,我感觉使用rm-command的速度甚至更慢,如上所示。-v标志与此有关吗?

Answers:


37

是的,-v标志会降低命令速度。

大多数(如果不是全部)软件(或命令)将检查是否提供了标志,然后执行一堆与该标志相关的代码。在使用-v标志的情况下,他们可能会执行一堆输出命令(如echoprintf),如果没有该标志,他们会跳过这些命令。

这意味着处理器需要更多的指令周期,从而需要更多的执行时间。

如果您不打算阅读/不需要消息,最好不要使用-v标志。

另一方面,假定您不包括键入命令和按下Enter键所需的时间,那么CLI将(应该)比GUI更快。

这个超级用户的博客中,该图像很好地说明了缓慢性

在此处输入图片说明

对于有问题的特定命令,time命令的结果为

//with -v
real    0m8.753s
user    0m0.816s
sys     0m2.036s

//without -v
real    0m1.282s
user    0m0.124s
sys     0m1.092s

这是通过包含100000个空文件的目录完成的


9
我不会说“回声命令”。大多数程序不是bash脚本,因此它们调用echo。问题在于他们正在写到stdout(或stderr),换句话说,他们正在执行I / O操作,这需要时间(I / O成本很高),而且还需要系统调用(这意味着需要更多的上下文切换,因此更多缓存未命中等)。
Bakuriu 2014年

23
写入标准输出的主要问题是该内容的实际呈现。如果将stdout重定向到文件或/dev/null,性能几乎不会像在终端仿真器上显示文本那样受到阻碍。
Jacob Krall

从图中可以看出,如果从人的角度谈论响应时间,则时间差异可以忽略不计。因此,如果您担心查看命令的人的效率,则无关紧要。它仅与大量文件或许多重复的运行有关,而这些重复运行需要大量的计算机时间(例如繁忙的Web服务器或古老的计算机)。
帕迪·兰道

真正影响最大的,也许是唯一真正影响的情况是,当您通过SSH在远程计算机上运行命令时。详细的日志记录很容易产生数十兆的流量,这些流量必须从主机传输到控制台。从通过SSH运行的脚本中删除过多的控制台日志记录后,我曾经经历过10倍的加速。
谢尔盖2014年

5

为什么不发现自己:浪费时间。

$ time rm -rfv dontDeleteMe && mkdir dontDeleteMe
real    0m0.003s
user    0m0.001s
sys     0m0.002s

$ time rm -rf dontDeleteMe && mkdir dontDeleteMe
real    0m0.002s
user    0m0.001s
sys     0m0.001s

10
这并不能真正回答问题。每个命令单次运行之间的1毫秒差异可能是由许多因素引起的。如果省略了-v输出或目录为空,也不清楚。

更不用说速度下降不是来自额外执行的指令,而是来自将其写入文件或终端的过程。time' pretty much redirects the output to / dev / null”。
科尔·约翰逊
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.