是否可以按大小順序移動檔案?
喜歡:
mv /path/to/x /path/to/y
其中 x 和 y 是目錄。但是,首先移動較小的文件。或先更大的檔案。
另外,有理由不這麼做嗎?
答案1
你可以這樣做(未經測試):
for file in `ls --sort=size /path/to/x/*`; do mv $file /path/to/y/; done
您可以透過在 ls 中新增 --reverse 參數來反轉排序。如果檔案名稱包含空格,您可能需要引用 $file:
... mv "$file" /path/to/y/ ...
如果檔案名稱可能包含雙引號,那麼您就有麻煩了。
以下方法也可能有效,但它取決於 mv 實現,並且可能不適用於許多檔案(而且檔案名稱中的空格和/或引號仍然存在問題):
mv `ls --sort=size /path/to/x/*` /path/to/y/
你問:“有理由不這樣做嗎?”這個問題應該反過來問。有理由這樣做嗎?如果你有理由,那就去做吧。
答案2
如果您要移動文件在單一檔案系統內,那麼檔案中的資料不會被移動-只有檔案的名稱在目錄之間移動。因此,您可以立即移動 10 GB 的檔案(在單一檔案系統內)。因此,費盡心思查找所有文件的大小以便首先移動最小的文件將是浪費時間(在本例中)。
答案3
不這樣做的一個原因是,它需要您在移動之前建立所有文件的索引。然後獲取所有這些文件的大小並對它們進行排序。前您甚至可以開始複製。
然後就不能保證你在複製過程之前所計算出來的狀態是完全一樣的期間複製過程因此變得毫無意義。