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

Linux Shell脚本求助:如何批量删除特定格式文件

用find命令批量删除两类目标文件

你之前的find -name "~" -delete无效,是因为这个命令只会匹配**文件名恰好是单个~**的文件,而不是以~结尾的文件。下面是正确的实现方式:

分步骤实现

1. 删除所有以~结尾的文件

用通配符*~匹配任意以~结尾的文件名,命令如下:

find . -type f -name "*~" -delete

参数说明:

  • .:明确指定从当前目录开始递归遍历(部分系统省略后默认也是当前目录,加上更清晰)
  • -type f:只匹配普通文件,避免误删同名目录
  • "*~":通配符规则,*代表任意长度的字符,最终匹配所有以~结尾的文件名

2. 删除首尾均为#的文件

用通配符#*#匹配开头和结尾都是#的文件名,命令如下:

find . -type f -name "#*#" -delete

这里#*#的规则是:开头必须是#,中间可以是任意字符,结尾必须是#,能匹配像#temp#、##这类文件名。

合并成一条命令

如果想一次性处理两类文件,用-o(逻辑或)连接两个条件,同时用括号分组确保-delete作用于所有匹配项:

find . -type f \( -name "*~" -o -name "#*#" \) -delete

注意:括号需要转义(\(和\)),或者用单引号包裹括号('('和')'),避免shell解析括号时出错。

安全测试建议

删除前先预览匹配的文件,确认无误后再执行删除操作,把-delete换成-ls即可:

find . -type f \( -name "*~" -o -name "#*#" \) -ls

兼容老版本find(如BSD/macOS部分旧版本)

如果你的系统不支持-delete选项,可以用-exec rm {} +替代:

find . -type f \( -name "*~" -o -name "#*#" \) -exec rm {} +

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 13:33:18