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
相关产品推荐
相关产品推荐

