为什么我的命令“rm -rf *”不能删除目录中的所有文件?

为什么我的命令“rm -rf *”不能删除目录中的所有文件?

大多数文件都消失了,但我仍然留下这两个文件:

“.RData”和“.Rhistory”

为什么会这样呢?我正在使用 R,但我不知道这些文件是什么。

之后,我可以单独删除它们,而无需使用 sudo。

答案1

*仅包含可见文件。如果您想删除这些和隐藏的,请使用:

rm -rf * .*

点团选项

使用 bash,我们可以改变这种行为并取消隐藏文件。为了说明这一点,让我们创建两个文件,一个是隐藏的,一个不是:

$ touch unhidden .hide1
$ ls *
unhidden

如您所见,只有未隐藏的显示为ls *。现在让我们设置dotglob选项:

$ shopt -s dotglob
$ ls *
.hide1  unhidden

这两个文件现在都出现了。当然,如果我们愿意,我们可以关闭 dotglob:

$ shopt -u dotglob
$ ls *
unhidden

文档

man bash

当模式用于路径名扩展时,字符“.”名称开头或紧跟在斜杠后面的字符必须显式匹配,除非设置了 shell 选项 dotglob。匹配路径名时,斜杠字符必须始终显式匹配。在其他情况下,“.”字符不会被特殊处理。有关 nocaseglob、nullglob、failglob 和 dotglob shell 选项的说明,请参阅下面的 SHELL BUILTIN COMMANDS 下的 shopt 说明。

换句话说,路径名扩展忽略名称以 开头的文件,.除非.显式指定。

安全问题

为了避免令人不快的意外,即使您在命令行中指定,rm也会拒绝删除当前目录.和父目录:..

$ rm -rf .*
rm: refusing to remove ‘.’ or ‘..’ directory: skipping ‘.’
rm: refusing to remove ‘.’ or ‘..’ directory: skipping ‘..’

答案2

然后确保目录正确

sudo rm -rf * .*

相关内容