Linux

移動位於單個目錄中的大量文件的最有效方法是什麼?

  • June 5, 2017

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 之類的內容,則會抱怨該文件不是目錄。

在這裡將文件從一個目錄批量移動到另一個目錄的最佳命令是什麼?

利用 GNUmv-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必須每時每刻都存在,它可能會導致問題。)

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