Bash 移动大量文件
如果运行命令mv folder2/*.*folder,则会出现“参数列表过长”错误Bash 移动大量文件,bash,Bash,如果运行命令mv folder2/*.*folder,则会出现“参数列表过长”错误 我找到了一些ls和rm的示例,它们使用find folder2-name“*.*”处理这个错误。但是我很难将它们应用于mv查找folder2-name'*.'-exec mv\{\}/dest/directory/\ find folder2 -name '*.*' -exec mv {} folder \; -exec运行任何命令,{}插入找到的文件名,\标志着exec命令的结束。另一个find答案可以工作,
我找到了一些
ls
和rm
的示例,它们使用find folder2-name“*.*”
处理这个错误。但是我很难将它们应用于mv
查找folder2-name'*.'-exec mv\{\}/dest/directory/\代码>
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
首先,感谢卡尔的回答。对此我只有一点小小的修正
我的场景:
/source/directory中有数百万个文件夹,其中包含子文件夹和文件。目标是复制它,保持相同的目录结构
为此,我使用以下命令:
find /source/directory -mindepth 1 -maxdepth 1 -name '*' -exec mv {} /target/directory \;
在这里:
- -mindepth 1:确保不移动根文件夹
- -maxdepth 1:确保只搜索第一级子级。所以它的所有内容也会被移动,但你不需要搜索它
上面答案中建议的命令使结果目录结构扁平化,而这不是我想要的,所以决定分享我的方法。find不能处理很长的文件列表,它会给你同样的错误“参数列表太长”。使用ls、grep和xargs的组合对我来说很有效:
$ls | grep RadF | xargs mv-t../fd/
它成功地移动了大约50000个文件,而mv和find都失败了 这个一行命令应该适合您。
是的,它相当慢,但即使处理数百万个文件也能工作
for i in /folder1/*; do mv "$i" /folder2; done
它会将所有文件从文件夹/folder1
移动到/folder2
这个问题每周都会在S.O.上询问和回答。询问前请先了解如何搜索。祝你好运。@Sheller我确实找到了一些类似的例子,但正如我所说的,它们都是ls
和rm
@Sheller的例子,如果有这么多DUP,请找到一个并投票关闭。正常情况下同意,但如果直接的mv
生成“参数列表过长”错误,我怀疑使用find
构建的一个同样长的应用程序是否有效。我不确定我是否会遵循。这就是find
末尾的+
的全部要点。如果使用该选项,find
的行为与find | xargs
组合完全相同。当OP试图同时移动所有文件时,shell出错。find
和xargs
最终都会运行相同的shell命令来实际执行移动,因此它们也可能出错。这就是为什么我建议使用一次一个的方法,尽管速度较慢。我建议您阅读如何find+代码>和xargs
工作。它们的设计完全是为了向命令传递足够的参数,这样参数列表就不会“太长”。因此,它们可能会使用不同的参数多次调用该命令。对于每次这样的调用,参数列表的长度永远不会超过系统限制。无法使这些命令中的任何一个正常工作。。。也许是一个旧的模式或什么的,但这对我在Mac上很有用:find source_folder-name“*.jpg”-exec mv{}destination_folder\代码>谢谢你的回答,我想知道mv可以移动多少个文件。mv工作的文件数限制是多少。@Thunder,不确定确切的限制,但是mv
一个包含22897个文件的文件夹失败了。成功:在Ubuntu 18.04上测试,移动800000多个文件。运行了一段时间,但工作做得很完美。macOS Catalina 10.15上的成功。您是否确实尝试将名为“{}”的文件名移动到此处?为什么是反斜杠?不确定这是不是一个利吉特的答案。。?