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

