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

Jenkins SSH部署报错:删除/var/www/html文件排除app2目录出现语法错误

错误原因

这个语法错误的本质是bash的命令解析优先级问题:bash会先对整行命令做语法校验,再逐行执行命令。你在同一行里先写shopt -s extglob再用!(app2)扩展通配符的时候,bash解析到!(的时候,shopt命令还没执行,extglob模式尚未开启,所以会把(识别为非法字符抛出语法错误。

解决方案

方案1:使用find命令(兼容性最优,推荐生产环境使用)

无需依赖bash的扩展通配符特性,所有Linux发行版默认支持:

cd /var/www/html && find . -maxdepth 1 ! -name 'app2' ! -name '.' -exec rm -rf {} + && mv /var/tmp/MyApp/* /var/www/html/

参数说明:

  • -maxdepth 1 仅扫描当前目录层级,不会递归处理子目录内容
  • ! -name 'app2' 过滤掉名为app2的目录不删除
  • ! -name '.' 排除当前目录本身,避免误操作
  • -exec rm -rf {} + 将所有匹配到的文件/目录批量传递给rm命令删除

方案2:启动bash时直接开启extglob模式

显式调用bash并在启动时开启扩展通配符,让语法校验阶段就能识别!()语法:

bash -O extglob -c 'cd /var/www/html && rm -rf !(app2) && mv /var/tmp/MyApp/* /var/www/html/'

方案3:循环遍历判断删除

不需要依赖任何扩展特性,逻辑更直观:

cd /var/www/html && for f in *; do [ "$f" != "app2" ] && rm -rf "$f"; done && mv /var/tmp/MyApp/* /var/www/html/

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 21:39:03