Linux
移動位於單個目錄中的大量文件的最有效方法是什麼?
CentOS 5.x
如果這是一個重複的問題,我很抱歉。我見過很多類似的問題(關於刪除文件),但並不完全相同。
我有一個包含數十萬個文件(可能超過一百萬個)的目錄,作為對不同問題的短期修復,我需要將這些文件移動到另一個位置。
出於討論的目的,假設這些文件最初駐留在
/home/foo/bulk/
其中,我想將它們移動到/home/foo2/bulk2/
如果我嘗試
mv /home/foo/bulk/* /home/foo2/bulk2/
,我會收到“參數過多”錯誤。Google先生告訴我,批量刪除文件的另一種方法是執行查找。就像是:
find . -name "*.pdf" -maxdepth 1 -print0 | xargs -0 rm
如果我要刪除東西,那很好,但在這種情況下,我想移動文件……如果我鍵入
find . -name "*" -maxdepth 1 -print0 | xargs -0 mv /home/foo2/bulk2/
bash 之類的內容,則會抱怨該文件不是目錄。在這裡將文件從一個目錄批量移動到另一個目錄的最佳命令是什麼?
利用 GNU
mv
的-t
選項來指定目標目錄,而不是依賴於最後一個參數:find . -name "*" -maxdepth 1 -exec mv -t /home/foo2/bulk2 {} +
如果您在沒有該選項的系統上,您可以使用中間 shell 以正確的順序獲取參數(
find … -exec … +
不支持在文件列表之後放置額外的參數)。find . -name "*" -maxdepth 1 -exec sh -c 'mv "$@" "$0"' /home/foo2/bulk2 {} +
考慮
mv
使用父目錄而不是文件:mv /home/foo/bulk /home/foo2/bulk2 && mkdir /home/foo/bulk
(但如果
/home/foo/bulk
必須每時每刻都存在,它可能會導致問題。)