如果我运行命令mv folder2/*.* folder
,我会收到“参数列表太长”错误。
我找到了一些 and 的例子ls
,rm
处理这个错误,使用find folder2 -name "*.*"
. 但我无法将它们应用于mv
.
如果我运行命令mv folder2/*.* folder
,我会收到“参数列表太长”错误。
我找到了一些 and 的例子ls
,rm
处理这个错误,使用find folder2 -name "*.*"
. 但我无法将它们应用于mv
.
find folder2 -name '*.*' -exec mv {} folder \;
-exec
运行任何命令, {}
插入找到的文件名,\;
标记 exec 命令的结束。
其他find
答案有效,但对于大量文件来说非常慢,因为它们为每个文件执行一个命令。一种更有效的方法是+
在末尾find
使用,或者使用xargs
:
# Using find ... -exec +
find folder2 -name '*.*' -exec mv --target-directory=folder '{}' +
# Using xargs
find folder2 -name '*.*' | xargs mv --target-directory=folder
find folder2 -name '*.*' -exec mv \{\} /dest/directory/ \;
首先,感谢卡尔的回答。我对此只有轻微的修正。
我的场景:
/source/directory 中的数百万个文件夹,其中包含子文件夹和文件。目标是复制它并保持相同的目录结构。
为此,我使用这样的命令:
find /source/directory -mindepth 1 -maxdepth 1 -name '*' -exec mv {} /target/directory \;
这里:
上面答案中建议的命令使结果目录结构变平 - 这不是我想要的,所以决定分享我的方法。
这个单行命令应该适合您。是的,它很慢,但即使处理数百万个文件也可以。
for i in /folder1/*; do mv "$i" /folder2; done
它会将所有文件从文件夹移动/folder1
到/folder2
.
find不适用于非常长的文件列表,它会给你同样的错误“参数列表太长”。结合使用ls、grep和xargs对我有用:
$ ls|grep RadF|xargs mv -t ../fd/
它成功地移动了大约 50,000 个文件,其中 mv 和 find 单独失败。