我想知道为什么find
Solaris 中的行为方式与 Cygwin 或 Linux 中的行为方式不同。
我有一堆目录,其中包含名为CS##########
.每个#
都是一个数字,但 CS 后面总是有 10 位数字。
在 Cygwin 中使用时,find
列表按顺序排列:CS000000001
to CS00002345
。在 Solaris 中使用时,find
该列表完全无序。
我想知道这是否实际上与操作系统相关,或者是否是由于 find 的实现所致。
答案1
find
不对其输出进行排序。文件名的顺序取决于目录条目在文件系统中出现的顺序。无论是在 Solaris 还是 Windows 上,您都无法控制这一点。
在某些文件系统上,如果创建目录并向其中添加文件,文件将按添加顺序显示。这可能就是它们在 Windows 下排序的原因。但并非所有情况都是如此(例如,我认为 Solaris 的 zfs 上就不会出现这种情况),如果您开始删除目录中的文件并添加其他文件,则大多数文件系统的顺序是不可预测的。
一些文件系统确实具有可预测的,但大多数没有。 Mac OS/OSX 的 HFS+ 和 Linux 的 Reiserfs 按字节字典顺序对文件名进行排序(请注意,进程的区域设置可能有不同的顺序)。 Linux 的 ext2/ext3/ext4 不排序。这不是你可以指望的事情。
如果您需要来自 的排序输出find
,请将其通过管道传输到sort
。