rm -rf $ TIGER / $ {LION} / $ {RABBIT} / *和rm -rf $ TIGER / $ {LION} / $ {RABBIT}之间的区别是什么?

时间:2014-05-08 20:37:40

标签: shell scripting ksh csh

我需要理解rm -rf $TIGER/${LION}/${RABBIT}/* and rm -rf $TIGER/${LION}/${RABBIT}之间的差异,以便在脚本中放置它不会产生灾难,使得它可以在没有设置变量的情况下从root中删除它。在csh / ksh中使用rm -rf的安全方法是什么?

感谢您的帮助!!

3 个答案:

答案 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)

将/ *放在最后将删除该目录中的内容

虽然只有" /"将删除目录本身及其中的内容。