Find

為什麼 find 的輸出在 Cygwin 中排序但在 Solaris 中沒有?

  • March 27, 2013

我想知道為什麼find在 Solaris 中的行為方式與在 Cygwin 或 Linux 中不同。

我有一堆目錄,其中包含名為CS##########. 每個#都是一個數字,但 CS 後面總是有 10 個數字。

find在 Cygwin 中使用時,列表按順序排列:CS000000001CS00002345. 在 Solaris 中使用find時,列表完全無序。

我想知道這是否實際上與作業系統相關,或者是否是由於 find 的實現。

find不對其輸出進行排序。文件名的順序取決於目錄條目在文件系統中出現的順序。無論是在 Solaris 還是 Windows 上,您都無法控制它。

在某些文件系統上,如果您創建一個目錄並向其中添加文件,這些文件將按照添加的順序出現。這可能是它們在 Windows 下排序的原因。但並非所有地方都是這種情況(例如,我認為 Solaris 的 zfs 上從來沒有這種情況),如果您開始刪除目錄中的文件並添加其他文件,則大多數文件系統的順序是不可預測的。

一些文件系統確實有 predictable ,但大多數沒有。Mac OS/OSX 的 HFS+ 和 Linux 的 Reiserfs 按字節字典順序對文件名進行排序(請注意,程序的區域設置可能有不同的順序)。Linux 的 ext2/ext3/ext4 不排序。這不是你可以指望的東西。

如果您需要來自 的排序輸出find,請將其通過管道傳輸到sort.

引用自:https://unix.stackexchange.com/questions/69274