问题描述
在这个问题:在bash中,如何删除目录中的所有文件和子目录而不删除目录?它被问到如何删除文件夹中的所有文件,而不是文件夹本身。
Matt的回答包括在’rm’命令中使用-v标志。
rm -rfv dontDeleteMe && mkdir dontDeleteMe
我留下的命令是上面的命令。确实当然有用,但’rm’中的-v标志和/或通常会减慢通过命令行完成的任务吗?
我有一个.txt-files(大约100.000)的文件夹,我已经为自己创建,删除和重新创建了几次。有些时候使用rm,有时候在文件浏览器中,我觉得使用rm-command比上面显示的更慢。 -v标志是否与此有关?
最佳解决思路
是的,-v标志会减慢命令。
大多数(如果不是所有)软件(或命令)都会检查是否提供了标志,然后执行一组与该标志相关的代码。在-v标志的情况下,他们可能会执行一堆输出命令(如echo
或printf
),他们宁愿在没有标志的情况下跳过这些命令。
这意味着处理器的指令周期更多,因此执行时间更长。
如果您不打算阅读/需要消息,最好不要使用-v标志。
另一方面,CLI将/应该比GUI更快,假设您没有包括键入命令和按Enter
键所需的时间。
从this blog of superuser开始,这张图片很好地解释了它的慢度
对于有问题的特定命令,time命令的结果是
//with -v
real 0m8.753s
user 0m0.816s
sys 0m2.036s
//without -v
real 0m1.282s
user 0m0.124s
sys 0m1.092s
这是通过包含100000个空文件的目录完成的
次佳解决思路
为什么不找出自己:利用时间。
$ 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
参考资料