AlexOnLinux Asked: 2019-03-18 01:36:35 +0800 CST2019-03-18 01:36:35 +0800 CST 2019-03-18 01:36:35 +0800 CST 使用“get -r 文件夹”时 sftp 以什么顺序获取文件? 772 我正在使用sftp. 使用该get -r folder命令,我对程序下载内容的顺序感到惊讶。 看起来它会选择它需要随机下载的文件。我不敢相信事实就是这样,我问自己幕后发生了什么? sftp下载文件夹及其内容时遵循的顺序是什么? 从我目前所见,它既不是名称也不是大小。 file-copy sftp 1 个回答 Voted Best Answer telcoM 2019-03-18T02:31:00+08:002019-03-18T02:31:00+08:00 当您使用命令列出目录内容时ls,它会默认按照当前语言环境的排序规则将列表排序为字母数字顺序。很容易假设这是文件系统中事物的“自然顺序”——但事实并非如此。 大多数文件系统不会以任何方式对目录进行排序:当向目录添加新文件时,新文件基本上会获得目录元数据结构中的第一个空闲槽。仅在向用户显示目录列表时才进行排序。如果单个目录中包含数十万或数百万个文件,则这种排序实际上可能需要大量的内存和处理能力。 当处理文件的顺序无关紧要时,最有效的方法是只按顺序读取目录元数据,并按照遇到的顺序处理文件,而不需要任何显式排序。在大多数情况下,这意味着文件将基本上按照它们添加到目录的顺序进行处理,在旧文件被删除并且后来添加的文件回收其元数据槽的情况下穿插新文件。 一些文件系统可能在其内部设计中使用树结构或其他东西,这可能会强制其目录条目的特定顺序作为副作用。但是这样的排序可能基于文件的 inode 编号或其他文件系统内部细节,因此不能保证对人类有用。 正如@AB在问题评论中所说,一个find命令或一个ls -f或ls --sort=none将在没有任何明确排序的情况下列出文件,无论文件系统以何种顺序存储其目录。
当您使用命令列出目录内容时
ls
,它会默认按照当前语言环境的排序规则将列表排序为字母数字顺序。很容易假设这是文件系统中事物的“自然顺序”——但事实并非如此。大多数文件系统不会以任何方式对目录进行排序:当向目录添加新文件时,新文件基本上会获得目录元数据结构中的第一个空闲槽。仅在向用户显示目录列表时才进行排序。如果单个目录中包含数十万或数百万个文件,则这种排序实际上可能需要大量的内存和处理能力。
当处理文件的顺序无关紧要时,最有效的方法是只按顺序读取目录元数据,并按照遇到的顺序处理文件,而不需要任何显式排序。在大多数情况下,这意味着文件将基本上按照它们添加到目录的顺序进行处理,在旧文件被删除并且后来添加的文件回收其元数据槽的情况下穿插新文件。
一些文件系统可能在其内部设计中使用树结构或其他东西,这可能会强制其目录条目的特定顺序作为副作用。但是这样的排序可能基于文件的 inode 编号或其他文件系统内部细节,因此不能保证对人类有用。
正如@AB在问题评论中所说,一个
find
命令或一个ls -f
或ls --sort=none
将在没有任何明确排序的情况下列出文件,无论文件系统以何种顺序存储其目录。