使用“get -r 文件夹”时,sftp 按什么顺序获取文件?

使用“get -r 文件夹”时,sftp 按什么顺序获取文件?

我正在使用sftp.使用该get -r folder命令,我对程序下载内容的顺序感到惊讶。

看起来它会随机选择需要下载的文件。我不敢相信事实确实如此,我问自己幕后发生了什么?

sftp下载文件夹及其内容时遵循的顺序是什么?

据我目前所知,它不是按名称,也不是按大小。

答案1

当您使用该命令列出目录内容时ls,默认情况下它会根据当前语言环境的排序规则将列表按字母数字顺序排序。人们很容易认为这是文件系统中事物的“自然顺序”——但事实并非如此。

大多数文件系统不会以任何方式对目录进行排序:当向目录添加新文件时,新文件基本上会获得目录元数据结构中的第一个空闲槽。仅当向用户显示目录列表时才会进行排序。如果单个目录中有数十万或数百万个文件,则这种排序实际上需要大量的内存和处理能力。

当处理文件的顺序无关紧要时,最有效的方法是仅按顺序读取目录元数据并按遇到的顺序处理文件,而不进行任何显式排序。在大多数情况下,这意味着文件将基本上按照添加到目录的顺序进行处理,在旧文件被删除并且后来添加的文件回收其元数据槽的情况下,会穿插有较新的文件。

某些文件系统可能在其内部设计中使用树结构或其他结构,这可能会强制其目录条目遵循特定的顺序,作为副作用。但是这样的排序可能基于文件的索引节点号或其他一些文件系统内部细节,因此不能保证对人类有任何实际用途。

正如@AB所说在问题评论中find命令或ls -fls --sort=none将列出文件而不进行任何显式排序,无论文件系统存储其目录的顺序如何。

相关内容