我尝试搜索SO,但无法找到以下命令之间的区别。如果我有一个名为dir的目录,下面的命令有何不同?
rm -rf dir/*
rm -rf dir/
rm -rf dir
如果运行命令的id不是所有者,或者甚至在所有者的组中,对目录的用户权限如何影响结果?
我正在添加命令,在我正在处理的shell脚本中执行rm -rf,需要帮助来理解上述命令之间的区别。
答案 0 :(得分:9)
rm -rf dir/*
删除目录中的文件(不删除目录本身)。 注意,hidden files不会被删除。
rm -rf dir/
尾部斜杠表示dir
是目录。如果它是一个文件,它将不会被删除。在您的情况下,这与rm -rf dir
相同,但一般情况不同(见下文)
rm -rf dir
在您的情况下,与上面的相同。
通常,rm
等工具在路径名解析时通常会遵循IEEE/OpenGroup standards,这意味着dir/
等同于dir/.
。其中一个含义是,如果dir
是目录rm -rf dir/
的符号链接,则会删除目录的内容(包括隐藏文件),但不删除链接或目录本身,而{{1}只会删除符号链接。
您需要对要删除的文件或目录具有rm -rf dir
权限,并对write
需要遍历以删除文件的目录具有exec
权限。您可以阅读有关Unix文件系统权限here的更多信息。