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

Shell脚本复制文件无语法错误却提示文件不存在如何解决

故障原因

报错和文件名准确性无关,核心是Shell通配符展开规则和引号使用冲突:

  • 你给通配符模式*.dat加了双引号赋值,后续执行复制命令时又给$FILE加了双引号,双引号会强制Shell保留字符串字面含义,禁止通配符(globbing)展开,最终Shell会去找文件名字面就是*.dat(文件名本身带星号字符)的文件,自然匹配不到目标文件触发报错。
  • 脚本中cd $SOURCE_PATH没有做失败校验,如果源路径不存在、当前用户无访问权限,cd执行失败后脚本会继续在原工作目录执行复制,也会触发文件不存在错误。
修正方案

如果不需要单独用变量存匹配规则,直接写通配符即可,同时补上cd执行失败的兜底判断,修正后脚本如下:

#!/bin/bash
export SOURCE_PATH="/home/la1122/export"
export SOURCE_TARGET="/home/la1122/export/backup"

cd "$SOURCE_PATH" || { echo "进入源目录失败,脚本退出"; exit 1; }
echo "Current location: $(pwd)"
cp *.dat "$SOURCE_TARGET"

如果你确实需要把匹配模式存在变量中,注意引用变量时不要加双引号,否则通配符不会展开,对应写法:

FILE=*.dat
# 注意这里$FILE不要加双引号
cp $FILE "$SOURCE_TARGET"

补充说明:双引号适合用来包裹固定路径、固定文件名这类不需要做通配匹配、需要保留原始字符的内容,避免空格、特殊字符被Shell拆分;如果字符串里包含* ?这类需要做文件名匹配的通配符,就不能给整段内容加双引号,否则通配符会失效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 22:15:47