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

使用通配符*执行cp批量复制文件不生效的原因是什么?

报错原因

你需要先理解Shell通配符的展开逻辑和cp命令的参数规则:

  • Shell会在执行命令前先解析展开通配符,且只会匹配当前已存在的文件。你当前目录下只有1.txt、2.txt、3.txt三个文件,没有后缀为.txt.cp的文件,所以*.txt.cp不会被展开,会作为原始字符串直接传给cp命令。
  • cp命令的多参数规则:如果传入的参数数量≥3,cp会默认最后一个参数是目标目录,要求把前面所有的源文件都复制到这个目录下。

你执行cp *.txt *.txt.cp时,Shell展开后实际执行的命令是:

cp 1.txt 2.txt 3.txt *.txt.cp

此时最后一个参数*.txt.cp不是已存在的目录,就触发了目标不是目录的报错。

正确实现批量复制的方法

可以用Shell循环实现需求,命令如下:

for f in *.txt; do cp "$f" "$f.cp"; done

也可以用xargs实现:

ls *.txt | xargs -I {} cp {} {}.cp

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 21:45:07