如果我运行命令mv folder2/*.* folder
,我会得到“参数列表太长”错误。
我找到了ls
和rm
的一些示例,使用find folder2 -name "*.*"
处理此错误。但我无法将它们应用到mv
。
答案 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 \;
这里:
以上答案中建议的命令使结果目录结构平坦-并不是我想要的,所以决定分享我的方法。
答案 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
。