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

如何修复带参数删除文件夹的Shell脚本以防范用户误操作删除风险

解决方案

核心思路是先对路径做标准化解析,校验目标路径必须为脚本所在目录的子目录,校验通过后再执行删除操作,示例实现如下:

#!/bin/bash
# 获取脚本所在目录的绝对路径,自动解析软链接、相对路径
SCRIPT_DIR=$(realpath "$(dirname "${BASH_SOURCE[0]}")")

# 入参非空校验
if [ $# -ne 1 ] || [ -z "$1" ]; then
    echo "错误:请传入要删除的子目录名称,仅允许删除脚本目录下的内容"
    exit 1
fi

# 解析用户输入的路径得到标准化绝对路径
TARGET_DIR=$(realpath -m -- "${SCRIPT_DIR}/${1}")

# 路径合法性校验:必须是脚本目录的子目录,且不能等于脚本根目录
if [[ "${TARGET_DIR}" != "${SCRIPT_DIR}"/* ]] || [[ "${TARGET_DIR}" == "${SCRIPT_DIR}" ]]; then
    echo "错误:禁止删除脚本目录层级以上的内容,也不允许直接删除脚本根目录"
    exit 1
fi

# 可选:新增目标目录存在性校验
# if [ ! -d "${TARGET_DIR}" ]; then
#     echo "错误:目标目录 ${TARGET_DIR} 不存在"
#     exit 1
# fi

# 校验通过执行删除
rm -rf -- "${TARGET_DIR}"/*

关键说明

  • 用realpath对所有路径做标准化处理,自动消除..、.、多余斜杠、软链接等带来的路径歧义,从根源避免路径穿越问题
  • 前缀匹配规则严格限制删除范围,哪怕传入/、../..等非法路径都会直接拦截
  • 所有变量用双引号包裹、命令添加--前缀,兼容带空格、特殊字符、以-开头的路径
  • 如果运行环境没有realpath,可直接替换为readlink -f,逻辑完全兼容

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 22:15:02