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

Bash脚本中如何移动文件夹内除指定文件外的所有文件

解决Bash脚本中!(pattern)通配符失效的问题

问题根源

!(files2feed.php)是Bash的**扩展通配符(extglob)**语法,这个特性默认在交互式终端中可能已启用,但在非交互式的Bash脚本里默认是关闭的,直接使用或转义!都无法触发通配扩展,导致命令失效。

两种可行解决方案

方案1:启用extglob特性

在脚本的Shebang行之后添加开启extglob的命令,之后原命令即可正常使用:

#!/bin/bash
# 开启扩展通配符特性
shopt -s extglob

# 执行移动命令
mv /media/site/public_html/ftp/category1/!(files2feed.php) /media/mysite/public_html/ftp/in/

方案2:用find命令替代(兼容性更强)

如果不想依赖extglob特性,可使用find命令实现相同逻辑,无需修改Shell选项:

# 先确保目标目录存在,不存在则创建
mkdir -p /media/mysite/public_html/ftp/in/

# 查找当前目录下除files2feed.php外的所有文件并移动
find /media/site/public_html/ftp/category1/ -maxdepth 1 -type f ! -name 'files2feed.php' -exec mv {} /media/mysite/public_html/ftp/in/ \;
  • -maxdepth 1:仅处理目标目录下的文件/目录,不递归子目录
  • -type f:仅处理文件(若需包含目录,可改为-type f,d或去掉此参数)
  • ! -name 'files2feed.php':排除指定文件名

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 21:02:05