为什么从命令行删除比从 GUI 删除花费的时间要少得多?

Jor*_*ahn 26 linux command-line

当我从我的计算机中删除十几个图像时,我想知道:通过rm -rf对目录内容的快速命令,所有图像都消失了。当我将相同的十几个图像拖到垃圾桶/回收站时,有时需要 10 秒或更长时间。

现在我确定其中一些来自 GUI 等的开销,其中一些可能是因为如果将文件放入回收站,该文件仍然以某种形式“存在”,但还有什么其他原因吗?占了如此巨大的时间差距?“rm”和“delete”是根本不同的命令,所以我想比较苹果和橙子吗?

Maj*_*nko 37

正如您正确地注意到的那样,GUI 不仅仅是“删除”文件。

$ rm -rf 
Run Code Online (Sandbox Code Playgroud)

只是递归到文件夹中删除它在那里找到的文件和文件夹。

GUI 首先扫描整个树以找出那里有什么(因此它知道绘制漂亮的条需要多少操作),然后它再次遍历树,将文件从当前位置移动到特定 GUI 的垃圾桶文件。移动需要更长的时间,因为它必须首先生成一个新的唯一文件名,链接垃圾文件夹中的文件,然后将其与当前文件夹取消链接,并更新文件来源的索引,以便它们可以“撤消”-许多操作而不是一个。

例如,在 Gnome 3 上,文件被移动到以下位置:

~/.local/share/Trash/files/<filename>[.<version>]
Run Code Online (Sandbox Code Playgroud)

哪里filename是原始文件名,version是一个递增的版本号,以确保文件是唯一的(第一个文件实例没有版本号)。与此相关的是.trashinfo存储在文件夹中的文件:

~/.local/share/Trash/info/<filename>[.<version>].trashinfo
Run Code Online (Sandbox Code Playgroud)

此文件包含删除前文件的原始路径,以及删除此文件的日期和时间。

所有这些额外的操作,必须对要删除的树中的每个单独文件执行,确保您能够从垃圾箱中恢复任何文件,并且您能够从垃圾箱中删除名称相同的文件。相同的位置并仍然恢复早期版本。

所有这些都不是通过简单的rmmv命令完成的。