为什么 find 的输出在 Cygwin 中排序但在 Solaris 中不排序?

为什么 find 的输出在 Cygwin 中排序但在 Solaris 中不排序?

我想知道为什么findSolaris 中的行为方式与 Cygwin 或 Linux 中的行为方式不同。

我有一堆目录,其中包含名为CS##########.每个#都是一个数字,但 CS 后面总是有 10 位数字。

在 Cygwin 中使用时,find列表按顺序排列:CS000000001to CS00002345。在 Solaris 中使用时,find该列表完全无序。

我想知道这是否实际上与操作系统相关,或者是否是由于 find 的实现所致。

答案1

find不对其输出进行排序。文件名的顺序取决于目录条目在文件系统中出现的顺序。无论是在 Solaris 还是 Windows 上,您都无法控制这一点。

在某些文件系统上,如果创建目录并向其中添加文件,文件将按添加顺序显示。这可能就是它们在 Windows 下排序的原因。但并非所有情况都是如此(例如,我认为 Solaris 的 zfs 上就不会出现这种情况),如果您开始删除目录中的文件并添加其他文件,则大多数文件系统的顺序是不可预测的。

一些文件系统确实具有可预测的,但大多数没有。 Mac OS/OSX 的 HFS+ 和 Linux 的 Reiserfs 按字节字典顺序对文件名进行排序(请注意,进程的区域设置可能有不同的顺序)。 Linux 的 ext2/ext3/ext4 不排序。这不是你可以指望的事情。

如果您需要来自 的排序输出find,请将其通过管道传输到sort

相关内容