我有一个真正需要特定文件夹上的rm -fr的脚本
我希望尽可能安全。我在下面开始编写这个脚本,但我想知道是否还有其他错过的内容。
folder=""
if [[ ! -d "$folder" ]]; then
echo "Error: is not a folder"
elif [[ "$folder" == "/" ]]; then
echo "Error: folder points to root"
elif [[ "$folder" == "../"* ]]; then
echo "Error: folder start with ../"
elif [[ "$folder" == *"/.."* ]]; then
echo "Error: folder contains /.."
elif [[ "$folder" == *"/*"* ]]; then
echo "Error: folder ends with /*"
else
rm -fr "$folder"
fi
更新:添加了检查" /"
答案 0 :(得分:0)
如果你想尽可能安全,你或许......
确保首先完成任何通配:
shopt -s nullglob
declare -a folders=(folder_or_glob)
迭代遍历数组的每个元素,一次一个,并在规范路径上运行。
for f in "${folders[@]-}"
do
[[ $f ]] || continue
candidate="$(realpath -e -s "$f")" || continue
ok_to_delete "$candidate" || continue
rm -rf "$candidate"
done
使用函数ok_to_delete
来测试:
ok_to_delete()
{
[[ -d $1 ]] || continue # Is directory
[[ $1 != / ]] || continue # Not root
[[ "${1%/*}" ]] || continue # At least two levels deep
(... add any test you want ...)
}
这里有一些冗余(例如,根目录不是root + 2级),但这只是为了给你提供想法。
答案 1 :(得分:0)
我不想检查文件夹的路径名,而是检查该文件夹中的内容,文件的大小/用户/时间戳/键/扩展等,或者您最关心的内容。这对你来说是一种更安全的方法,这只是我的两分钱。