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

在Bash中如何删除除指定文件外的全部隐藏及非隐藏文件?

Bash保留单个指定文件删除其余所有文件的实现方案

方案1:extglob 扩展匹配(脚本内使用更简洁)

这种方案适合在你自己编写的控制脚本内使用,逻辑清晰易读:

  • 先开启必要的shell选项:
shopt -s extglob dotglob

配置说明:

  • extglob:开启Bash的扩展通配符能力
  • dotglob:让通配符默认匹配.开头的隐藏文件,无需单独处理隐藏文件规则
  • 执行删除操作,以目标目录为./repo,要保留的文件为update.sh为例:
rm -rf ./repo/!(update.sh)
  • 可选项:执行完成后关闭扩展选项,避免影响后续脚本逻辑:
shopt -u extglob dotglob

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

如果需要跨环境兼容,或者不想修改shell选项,可以用find命令实现:

  • 命令示例,同样以保留./repo/update.sh为例:
find ./repo -mindepth 1 -not -path "./repo/update.sh" -delete

参数说明:

  • -mindepth 1:避免匹配到目标目录本身,防止误删父目录
  • -not -path "./repo/update.sh":按完整路径排除要保留的文件,规则更精准,如果只要匹配文件名可以替换为-not -name "update.sh"
  • -delete:直接删除匹配到的所有文件和目录

安全提示

正式执行删除前,建议先做预览验证:
方案1可以把rm -rf替换为echo,查看输出的待删除文件列表是否符合预期
方案2可以把-delete替换为-print,打印待删除列表确认无误后再执行实际删除

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 11:54:04