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

如何修复将ads/中含指定字符串文件复制到projection/的脚本错误?

修复cp命令非法选项错误的解决方案

咱们先拆解下你脚本里的问题根源:

  • 首先awk的分隔符用了//,但实际文件路径都是单斜杠/分隔的,这会导致你提取的路径完全混乱;
  • 更关键的是xargs后面的命令写法错了——cp $0 projection/$1里的$0指的是你当前运行的脚本本身,$1也不是xargs传递过来的文件名,这直接让cp接收到了错误参数,触发了非法选项的报错;
  • 另外你提到要移动文件,但脚本里用的是cp(复制),如果确实要移动得换成mv哦。

给你几个靠谱的修复方案:

方案1:直接批量复制到目标目录(最简单)

如果不需要额外处理路径,直接用cp -t指定目标目录,完美适配xargs的批量传递逻辑:

grep -Rli '22/05/2018' ads/ | xargs cp -t projection/

方案2:用xargs占位符处理(更灵活)

如果需要对文件名做额外调整,用xargs -I {}指定占位符,把每个匹配的文件路径代入命令:

# 复制文件
grep -Rli '22/05/2018' ads/ | xargs -I {} cp {} projection/
# 如果是移动文件,替换成mv
grep -Rli '22/05/2018' ads/ | xargs -I {} mv {} projection/

方案3:处理含空格/特殊字符的文件名

如果你的文件名里有空格或者特殊字符,得用零字节分隔符避免出错:

grep -RliZ '22/05/2018' ads/ | xargs -0 cp -t projection/

简单解释下各部分的作用:

  • grep -Rli '22/05/2018' ads/:递归扫描ads目录,找出包含22/05/2018的文件,-l只输出文件名,-i是忽略大小写(不需要的话可以删掉);
  • xargs -0/xargs -I {}:负责把grep输出的每个文件名传递给后面的cp/mv命令,确保每个文件都被正确识别;
  • cp -t projection/:-t选项让cp先接收目标目录,再接收源文件,这样批量传递多个源文件时不会出现参数顺序错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:43:22