我需要理解rm -rf $TIGER/${LION}/${RABBIT}/* and rm -rf $TIGER/${LION}/${RABBIT}
之间的差异,以便在脚本中放置它不会产生灾难,使得它可以在没有设置变量的情况下从root中删除它。在csh / ksh中使用rm -rf的安全方法是什么?
感谢您的帮助!!
答案 0 :(得分:8)
如果变量都未设置,那么这些命令中的任何一个都会造成灾难;它们的区别仅在于它们是删除目录本身还是删除了非隐藏内容。
如果您想安全地从根目录中递归删除,请明确测试该情况并取消:
[[ $TIGER && $LION && $RABBIT ]] || {
echo "TIGER, LION and RABBIT must all be set; script exiting"
exit 1
}
rm -rf ...
答案 1 :(得分:4)
以递归方式删除 $ {RABBIT}目录中的所有非隐藏文件 - $ {RABBIT}目录未删除:
rm -rf $TIGER/${LION}/${RABBIT}/*
注意隐藏文件(又名点文件)的文件名以.
开头。除非设置了shell dotglob选项,否则这些不与典型*
扩展匹配。
因此,要删除所有文件(包括隐藏文件),您可以使用shopt
:
shopt -s dotglob # turns shell option dotglob ON
rm -rf $TIGER/${LION}/${RABBIT}/* # Now deletes all (including hidden) files
shopt -u dotglob # FYI - unsets or turns dotglob OFF
以递归方式删除所有,包括 $ {RABBIT}目录。
rm -rf $TIGER/${LION}/${RABBIT}
答案 2 :(得分:0)
虽然只有" /"将删除目录本身及其中的内容。