使用 -v(详细)会减慢命令的速度吗?

Eir*_*iks 38 command-line rm

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

Matt出色的回答包括在 'rm' 命令中使用 -v 标志。

rm -rfv dontDeleteMe && mkdir dontDeleteMe
Run Code Online (Sandbox Code Playgroud)

我留下的命令是上面的那个。当然确实有用,但是“rm”中的 -v 标志和/或通常会减慢通过命令行完成的任务吗?

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

Reg*_*ser 41

是的,-v 标志会减慢命令的速度。

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

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

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

另一方面,CLI 将/应该比 GUI 更快,假设您不包括键入命令和按键所需的时间Enter

来自超级用户的这个博客,这张图片很好地解释了缓慢

在此处输入图片说明

对于有问题的特定命令,时间命令的结果是

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

//without -v
real    0m1.282s
user    0m0.124s
sys     0m1.092s
Run Code Online (Sandbox Code Playgroud)

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

  • 写入标准输出的主要问题是该内容的实际呈现;如果您将 stdout 重定向到一个文件或 `/dev/null`,性能几乎不会像在终端模拟器上显示文本那样受阻。 (23认同)
  • 我不会说“回声命令”。大多数程序不是 bash 脚本,因此它们*不*调用 echo。问题是它们正在*写入 stdout*(或 *stderr*),换句话说,它们正在执行 I/O 操作,这需要时间(I/O 成本高昂)并且它们还需要系统调用(这意味着更多上下文切换,因此更多的缓存未命中等)。 (9认同)

小智 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
Run Code Online (Sandbox Code Playgroud)

  • 这并没有真正回答这个问题。每个命令的单次运行之间的 1 ms 差异可能是由很多因素造成的。也不清楚是否省略了 `-v` 输出或目录为空。 (11认同)