逻辑:遍历全部
.js,不匹配.min.js的才删除
方式1:一行命令(直接终端执行,谨慎!建议先打印看要删哪些,再真正删)
bash
# 第一步:只打印将要删除的文件(测试,不会真实删除,强烈建议先跑这个核对)
find /你的目标目录 -type f -name "*.js" ! -name "*.min.js"
# 第二步,确认列表没问题,再执行删除
find /你的目标目录 -type f -name "*.js" ! -name "*.min.js" -delete
参数说明:
/你的目标目录:替换成实际路径,例如/data/www/project/public-type f:只处理普通文件,跳过目录-name "*.js":后缀js! -name "*.min.js":取反,排除min.js压缩文件-delete:直接删除找到的文件(放在最后)
⚠️ 重要:务必先不带
-delete执行,确认输出的文件列表是你预期要删除的,再加‑delete,防止误删!
方式2:完整shell脚本(保存为 clean_js.sh)
bash
#!/bin/bash
# ========== 修改这里为你的目标目录 ==========
TARGET_DIR="/data/www/project/public"
# ==========================================
if [ ! -d "$TARGET_DIR" ];then
echo "错误:目录 $TARGET_DIR 不存在!"
exit 1
fi
echo "=== 即将扫描目录: $TARGET_DIR ==="
echo "【预览将要删除的文件】"
find "$TARGET_DIR" -type f -name "*.js" ! -name "*.min.js"
read -p "确认删除以上文件? [y/N] " ans
if [[ "$ans" == "y" || "$ans" == "Y" ]];then
find "$TARGET_DIR" -type f -name "*.js" ! -name "*.min.js" -delete
echo "删除完成"
else
echo "已取消操作"
fi
使用:
bash
chmod +x clean_js.sh
./clean_js.sh
补充说明边界
- 文件名为
abc.min.js不会删;abc.js、abc.dev.js、abc.123.js都会被删除,符合需求。 - find会递归所有后代子目录。
- 如果文件名带换行等极端奇葩文件名,
find -delete是安全的,不要用管道xargs(xargs容易踩文件名坑)。
安全提醒
- 不要直接对
/根目录执行,会灾难! - 优先预览再删除;重要目录操作前建议备份。
如果你需要我顺带写一个删除后输出统计一共删了多少个文件的版本,我可以补充。