2012-08-13 22 views
17

如果我運行命令mv folder2/*.* folder,我得到「參數列表太長」的錯誤。移動大量文件

我找到lsrm的一些例子,處理這個錯誤,使用find folder2 -name "*.*"。但我很難將它們應用到mv

+0

這個問題被提出和回答在這裏S.O.每週一次。請在提問前瞭解如何搜索。祝你好運。 – shellter 2012-08-13 21:21:31

+0

@shellter我發現了一些類似的例子,但正如我所說的,它們都是'ls'和'rm'的例子。 – DrXCheng 2012-08-13 21:25:38

+1

@shellter,如果有這麼多的玩家,找到一個並投票結束。 – 2012-08-13 22:36:19

回答

47
find folder2 -name '*.*' -exec mv {} folder \; 

-exec運行任何命令,{}插入找到的文件名,\;標誌着exec命令的末尾。

+0

感謝您的回答,我想知道有多少文件可以移動。什麼是文件計數的限制mv工作。 – Thunder 2017-12-02 03:00:10

12

另一個find可以解決問題,但對於大量文件來說速度非常慢,因爲它們爲每個文件執行一個命令。一個更有效的方法是要麼在find結尾使用+,或使用xargs

# Using find ... -exec + 
find folder2 -name '*.*' -exec mv --target-directory=folder '{}' + 

# Using xargs 
find folder2 -name '*.*' | xargs mv --target-directory=folder 
+0

同意通常,但如果一個直的'mv'產生一個「參數列表太長」的錯誤,我懷疑一個就像使用'find'建立的很長時間一樣。 – 2012-08-13 22:33:42

+1

我不知道我關注。這就是'find'結尾的'+'的全部。如果你使用它,'find'的行爲與'find |行爲完全一致xargs'組合。 – Idelic 2012-08-14 14:09:53

+0

當OP嘗試一次移動所有文件時,Shell出錯。 'find'和'xargs'最終都會運行相同的shell命令來實際執行此操作,因此它們可能也會出錯。這就是爲什麼我建議一次一個的方法,即使它比較慢。 – 2012-08-14 15:11:08