移动大量文件

时间:2012-08-13 21:15:02

标签: bash

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

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

6 个答案:

答案 0 :(得分:82)

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

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

答案 1 :(得分:18)

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

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

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

答案 2 :(得分:3)

首先,感谢卡尔的回答。我对此只有一点改正。

我的情况:

/ source /目录中有数百万个文件夹,其中包含子文件夹和文件。目标是将其复制以保持相同的目录结构。

为此,我使用以下命令:

find /source/directory -mindepth 1 -maxdepth 1 -name '*' -exec mv {} /target/directory \;

这里:

  • -mindepth 1:确保您不移动根文件夹
  • -maxdepth 1:确保仅搜索一级儿童。因此,它的所有内容也将被移动,但是您无需搜索它。

以上答案中建议的命令使结果目录结构平坦-并不是我想要的,所以决定分享我的方法。

答案 3 :(得分:2)

find folder2 -name '*.*' -exec mv \{\} /dest/directory/ \;

答案 4 :(得分:1)

查找不适用于很长的文件列表,它会给您同样的错误“参数列表过长”。使用 ls grep xargs 的组合为我工作:

$ ls|grep RadF|xargs mv -t ../fd/

它成功地将大约50,000个文件移动到了mv和查找失败的地方。

答案 5 :(得分:0)

此单线命令应为您工作。 是的,它非常慢,但是即使使用数百万个文件也可以使用。

for i in /folder1/*; do mv "$i" /folder2; done

它将所有文件从文件夹/folder1移到/folder2