Bash脚本条件删除文件:排除node_modules与build文件夹问题
解决Bash脚本删除文件时排除指定目录的问题
你的脚本存在语法错误,且缺少实际删除操作,导致无法达成需求,下面是问题分析和修正方案:
原脚本的问题
- 变量赋值错误:
file_name = "$file"中赋值符号=前后不能有空格,正确写法是file_name="$file" - if条件语法错误:Bash中判断条件需用
[[ ... ]](推荐)或[ ... ],而非( ... );同时"$file_name"!="build"缺少空格,应写成"$file_name" != "build" - 仅输出文件名,未执行删除操作
修正后的遍历脚本
如果要遍历当前目录内容并删除(排除node_modules和build),可以用以下脚本:
for file in *; do file_name="$file" if [[ "$file_name" != "node_modules" && "$file_name" != "build" ]]; then # 测试阶段可先保留echo确认要删除的内容,无误后再替换成rm -rf # echo "待删除:$file" rm -rf "$file" fi done
更简洁的find命令写法
用find命令可以更高效实现需求:
# 删除当前目录下所有非node_modules、非build的内容,./*避免匹配隐藏文件 find ./* -maxdepth 0 ! -name "node_modules" ! -name "build" -exec rm -rf {} +
注意:删除操作有风险,建议先将
rm -rf替换为echo,确认待删除内容无误后再执行实际删除。
内容的提问来源于stack exchange,提问作者jaber
相关产品推荐
相关产品推荐

