File-Copy
使用“get -r 文件夾”時 sftp 以什麼順序獲取文件?
我正在使用
sftp
. 使用該get -r folder
命令,我對程序下載內容的順序感到驚訝。看起來它會選擇它需要隨機下載的文件。我不敢相信事實就是這樣,我問自己幕後發生了什麼?
sftp
下載文件夾及其內容時遵循的順序是什麼?從我目前所見,它既不是名稱也不是大小。
當您使用命令列出目錄內容時
ls
,它會預設按照目前語言環境的排序規則將列表排序為字母數字順序。很容易假設這是文件系統中事物的“自然順序”——但事實並非如此。大多數文件系統不會以任何方式對其目錄進行排序:當向目錄添加新文件時,新文件基本上會獲得目錄元資料結構中的第一個空閒槽。僅在向使用者顯示目錄列表時才進行排序。如果單個目錄中包含數十萬或數百萬個文件,則這種排序實際上可能需要大量的記憶體和處理能力。
當處理文件的順序無關緊要時,最有效的方法是只按順序讀取目錄元數據,並按照遇到的順序處理文件,而不需要任何顯式排序。在大多數情況下,這意味著文件將基本上按照它們添加到目錄的順序進行處理,在舊文件被刪除並且後來添加的文件回收其元數據槽的情況下穿插新文件。
一些文件系統可能會在其內部設計中使用樹結構或其他東西,這可能會強制其目錄條目的特定順序作為副作用。但是這樣的排序可能基於文件的 inode 編號或其他文件系統內部細節,因此不能保證對人類有用。
正如@AB在問題評論中所說,無論文件系統以何種順序儲存其目錄,
find
命令或 als -f
都會列出文件而不進行任何顯式排序。ls --sort=none