这个问题类似于在*nix中清空目录最安全的方法是什么?
我正在编写bash脚本,它定义了几个路径常量,并将它们用于文件和目录操作(复制,重命名和删除).通常有必要做以下事情:
rm -rf "/${PATH1}"
rm -rf "${PATH2}/"*
Run Code Online (Sandbox Code Playgroud)
在开发这个脚本的过程中,我想保护自己免受类似PATH1和PATH2等名称的错误输入,并避免将它们扩展为空字符串,从而导致擦除整个磁盘.我决定创建特殊的包装器:
rmrf() {
if [[ $1 =~ "regex" ]]; then
echo "Ignoring possibly unsafe path ${1}"
exit 1
fi
shopt -s dotglob
rm -rf -- $1
shopt -u dotglob
}
Run Code Online (Sandbox Code Playgroud)
这将被称为:
rmrf "/${PATH1}"
rmrf "${PATH2}/"*
Run Code Online (Sandbox Code Playgroud)
正则表达式(或sed表达式)应该捕获像"*","/*","/**/","///*"等路径,但允许路径,如"dir","/ dir","/ dir1/dir2 /","/ dir1/dir2/*".另外我不知道如何在"/ dir with space/*"的情况下启用shell globbing.有任何想法吗?
编辑:这是我到目前为止提出的:
rmrf() {
local RES
local RMPATH="${1}"
SAFE=$(echo "${RMPATH}" | sed -r 's:^((\.?\*+/+)+.*|(/+\.?\*+)+.*|[\.\*/]+|.*/\.\*+)$::g')
if [ -z "${SAFE}" ]; then
echo "ERROR! Unsafe deletion of ${RMPATH}" …Run Code Online (Sandbox Code Playgroud)