栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

为什么find -exec mv {} ./target/ +不起作用?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

为什么find -exec mv {} ./target/ +不起作用?

该手册(或在线GNU手册)几乎说明了一切。

找到-exec命令{} ;

对于每个结果,

command {}
都会执行。出现的所有内容
{}
均替换为文件名。
;
以斜杠为前缀,以防止外壳解释它。

查找-exec命令{} +

每个结果都将附加

command
并执行。考虑到命令长度的限制,我猜想该命令可能会执行更多次,其中手册页支持我:

该命令的调用总数将远远少于匹配文件的数目。

请注意手册页中的以下引用:

命令行的构建与xargs构建命令行的方式几乎相同

这就是为什么在空格之间

{}
以及
+
除空格之外都不允许使用任何字符的原因。
+
make find检测到应将参数附加到命令,就像
xargs

解决方案

幸运的是,的GNU实现

mv
可以接受目标目录作为参数,可以使用
-t
或较长的parameter
--target
。它的用法将是:

mv -t target file1 file2 ...

您的

find
命令将变为:

find . -type f -iname '*.cpp' -exec mv -t ./test/ {} +

从手册页:

-exec命令;

执行命令;如果返回0状态,则为true。以下所有要查找的参数都将被视为命令的参数,直到由’;’组成的参数为止 遇到。字符串“
{}”将替换为在命令参数中出现的所有处所正在处理的当前文件名,而不是仅在单独存在的参数中(如在某些版本的find中)。这两种构造都可能需要转义(以’'表示)或加引号,以防止它们被外壳扩展。有关使用-
exec选项的示例,请参见示例部分。对于每个匹配的文件,指定的命令运行一次。该命令在起始目录中执行。-exec操作的使用不可避免地存在安全问题;您应该改用-
execdir选项。


-exec命令{} +

-exec操作的此变体在选定的文件上运行指定的命令,但是通过在末尾附加每个选定的文件名来构建命令行。该命令的调用总数将远远少于匹配文件的数目。命令行的构建与xargs构建命令行的方式几乎相同。该命令内仅允许一个{{}”实例。该命令在起始目录中执行。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/388059.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号