You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Linux下使用find命令批量复制多条件匹配文件的方法

解决find多条件(-o)搭配-exec批量复制失效的问题

问题原因

find命令中,-o(逻辑或)的优先级低于-exec这类动作选项。你原命令的执行逻辑相当于:
( -name "ACMB*" ) -o ( -name "AAVD *" ) -o ... -o ( -name "AABS*" -exec cp ... )
只有最后一个-name "AABS*"的匹配结果会触发cp操作,其他条件匹配的文件不会执行复制,这就是目标目录仅出现AABS开头文件的原因。

正确解决方案

把所有匹配条件用括号包裹(提升优先级),确保所有符合条件的文件都会触发-exec动作。注意括号在shell环境中需要转义,或者用单引号包裹:

转义括号写法

$ find \( -name "ACMB*" -o -name "AAVD*" -o -name "SOCK*" -o -name "SMNK*" -o -name "APRN*" -o -name "WAPP*" -o -name "AABS*" -o -name "ATRN*" \) -exec cp "{}" ./forShaq1/ \;

单引号包裹括号写法(部分shell适用)

$ find '(' -name "ACMB*" -o -name "AAVD*" -o -name "SOCK*" -o -name "SMNK*" -o -name "APRN*" -o -name "WAPP*" -o -name "AABS*" -o -name "ATRN*" ')' -exec cp "{}" ./forShaq1/ \;

效率优化(可选)

如果需要复制的文件数量较多,用+代替;作为-exec的结束符,这样find会一次性将多个匹配文件传给cp命令,减少进程创建开销:

$ find \( -name "ACMB*" -o -name "AAVD*" -o -name "SOCK*" -o -name "SMNK*" -o -name "APRN*" -o -name "WAPP*" -o -name "AABS*" -o -name "ATRN*" \) -exec cp "{}" ./forShaq1/ +

内容的提问来源于stack exchange,提问作者HattrickNZ

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 21:15:05