首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >rm -rf $TIGER/${LION}/${ -rf }/*和rm -rf$TIGER/${LION}/${/$}有什么不同?

rm -rf $TIGER/${LION}/${ -rf }/*和rm -rf$TIGER/${LION}/${/$}有什么不同?
EN

Stack Overflow用户
提问于 2014-05-09 04:37:40
回答 3查看 2.6K关注 0票数 0

我需要了解rm -rf $TIGER/${LION}/${RABBIT}/* and rm -rf $TIGER/${LION}/${RABBIT}之间的区别,以便将其放入脚本中不会产生灾难,使其在变量未设置的情况下从根目录中删除所有可以删除的内容。在csh/ksh中使用rm -rf的安全方法是什么?

谢谢你的帮助!

EN

回答 3

Stack Overflow用户

发布于 2014-05-09 04:43:01

如果所有变量都未设置,这两个命令都会造成灾难;它们的区别只在于它们是删除目录本身,还是删除它的非隐藏内容。

如果您希望安全地防止从根目录递归删除,请显式测试这种情况,然后取消:

代码语言:javascript
复制
[[ $TIGER && $LION && $RABBIT ]] || {
  echo "TIGER, LION and RABBIT must all be set; script exiting"
  exit 1
}
rm -rf ...
票数 8
EN

Stack Overflow用户

发布于 2014-05-09 04:42:38

此操作将递归删除${}目录中的所有非隐藏文件-${}目录中的文件不会被删除:

代码语言:javascript
复制
 rm -rf $TIGER/${LION}/${RABBIT}/* 

注意:隐藏文件(又称点文件)的文件名以.开头。除非设置了 dotglob选项,否则这些是与典型的扩展不匹配的*

因此,要删除所有文件(包括隐藏文件),您可以使用shopt,如下所示:

代码语言:javascript
复制
 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}目录。

代码语言:javascript
复制
 rm -rf $TIGER/${LION}/${RABBIT}
票数 4
EN

Stack Overflow用户

发布于 2014-05-09 04:44:14

将/*放在末尾将删除该目录中的内容

而只有"/“会删除目录本身以及目录中的内容。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23552034

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档