移动大量文件

DrX*_*eng 50 bash

如果我运行命令mv folder2/*.* folder,我会得到"参数列表太长"错误.

我找到了一些使用lsrm处理此错误的例子find folder2 -name "*.*".但我无法应用它们mv.

Kar*_*ldt 93

find folder2 -name '*.*' -exec mv {} folder \;
Run Code Online (Sandbox Code Playgroud)

-exec运行任何命令, {}插入找到的文件名,\;标记exec命令的结束.

  • 成功:在 Ubuntu 18.04 上测试,移动了 800,000 多个文件。运行了一段时间,但完成了完美的工作。 (2认同)

Ide*_*lic 20

其他find答案有效,但对于大量文件来说非常慢,因为它们为每个文件执行一个命令.一种更有效的方法是+在最后find使用,或使用xargs:

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

# Using xargs
find folder2 -name '*.*' | xargs mv --target-directory=folder
Run Code Online (Sandbox Code Playgroud)

  • 我建议你阅读一下`find ... +`和`xargs`是如何工作的.它们的设计目的是为命令提供足够的参数,以便参数列表永远不会"太长".因此,他们可以使用不同的参数多次调用该命令.对于每次这样的调用,参数列表的长度永远不会超过系统限制. (6认同)
  • 无法让这些命令中的任何一个工作......也许是旧模式或其他东西,但这在Mac上对我有用:`find source_folder -name "*.jpg" -exec mv {} destination_folder \;` (2认同)