当我进入
find . -iname "[0-9]*.nii"
在我的 OSX 机器上它返回:
./03_Rest_fcMRI/9793_01_03_1.nii
./04_VEMP/9793_01_04_1.nii
./04_VEMP/9793_01_04_2.nii
./05_Tapping/9793_01_05_1.nii
./05_Tapping/9793_01_05_2.nii
./06_Adaptation/9793_01_06_1.nii
./06_Adaptation/9793_01_06_2.nii
./06_Adaptation/9793_01_06_3.nii
./06_Adaptation/9793_01_06_4.nii
./07_SWM/9793_01_07_1.nii
./07_SWM/9793_01_07_2.nii
./07_SWM/9793_01_07_3.nii
./08_Foot_Tapping/9793_01_08_1.nii
当我在 RHEL 上输入同一行代码时,我得到:
./06_Adaptation/9793_01_06_3.nii
./06_Adaptation/9793_01_06_4.nii
./06_Adaptation/9793_01_06_2.nii
./06_Adaptation/9793_01_06_1.nii
./03_Rest_fcMRI/9793_01_03_1.nii
./08_Foot_Tapping/9793_01_08_1.nii
./04_VEMP/9793_01_04_2.nii
./04_VEMP/9793_01_04_1.nii
./07_SWM/9793_01_07_3.nii
./07_SWM/9793_01_07_2.nii
./07_SWM/9793_01_07_1.nii
./05_Tapping/9793_01_05_2.nii
./05_Tapping/9793_01_05_1.nii
OSX 上的文件顺序对我来说似乎是合乎逻辑的。 RHEL 上的则不然。我知道我可以通过管道排序在 RHEL 上获得相同的顺序,但这不是我的问题。
我试图理解为什么 RHEL 上的 find 输出这个非字母数字顺序。
答案1
find 不会对文件进行排序,而是按照找到的顺序列出它们。它还按照找到目录的顺序遍历目录。您不能对顺序做出任何假设,但我相信它是可重复的,因为如果您再次运行 find ,您将得到相同的顺序。
在 Linux 上,文件是不是按字母顺序存储。也许它们在 OSX 上,或者也许它们恰好是按字母顺序创建的。
不排序并不是懒惰或错误,它本来就是这样的。如果要对文件进行排序,则在完成对文件系统的遍历之前将无法输出任何内容,这在许多情况下可能需要几分钟的时间。