我使用 Ubuntu 14.04,在终端中使用 sudo su 成为 root,我想手动删除 root 的垃圾。除了一些以点开头的文件之外,它删除了所有内容。就像 .htaccess 等。所以我进入该目录(即“文件”)并运行以下命令:
rm -rf .*
它确实删除了这些文件,但我还收到一条错误消息,指出系统无法删除“。”和“..”是什么意思?就像我尝试删除整个目录树一样?就像我说的,当我运行该命令时,我位于最低目录中。确切地说,是:/root/.local/share/Trash/files/ 我关掉了我的电脑,然后将其打开。乍一看一切似乎都很正常。所以现在我想问的是出了什么问题,我所做的是否真的会对系统造成严重损害?换句话说,我现在应该担心还是一切都好?
答案1
.*
匹配名称以 . 开头的所有文件.
。每个目录都包含一个名为 的文件.
(引用目录本身)和一个名为 的文件(..
引用父目录)。.*
包括这些文件。
幸运的是,尝试删除.
或..
失败,因此您会得到一个无害的错误。
在 zsh 中,.*
不匹配.
或..
。在bash中,你可以设置
GLOBIGNORE='.:..:*/.:*/..'
然后*
将匹配所有文件,包括点文件,但不包括.
和..
.
.
或者,您可以使用显式排除and的通配符模式..
:
rm -rf .[!.]* ..?*
或者
rm -rf .[!.] .??*
或者,使用find
.
find . -mindepth 1 -delete
答案2
当您想要删除所有点文件时,约定是使用以下命令:
rm .??*
这将删除所有以包含至少两个其他字符的点开头的文件,从而保持.
完整..
。当然,它也会丢失点后只有一个字母的文件名,但这种情况应该很少见。
答案3
find /path/to/dir -type f -name ".*" -delete
答案4
您可以根据自己的目的忽略该错误。
您使用了通配符匹配。不要与正则表达式混淆。您说删除所有以 .然后什么都没有,或者之后什么也没有。
现在您的错误消息是因为它将包含.
和..
。.
是当前目录的快捷方式,“..”是父目录的快捷方式。 (从技术上讲,它们的意思是别的,但对于这次对话来说它是有效的)。
您不能删除当前所在的目录,否则您会在哪里?而且你不能删除你的父目录,否则当前目录会去哪里。现在这并不完全正确,你能删除当前目录和父目录,但工具(在本例中为 rm)的设置使其变得有点困难,因为这样做有点违反直觉。
出了什么问题,我所做的是否真的会对系统造成严重损害?
根据您问题中的信息,我的答案是,是的,您做错了什么,是的,您可能会对您的系统造成一些相当严重的损坏。
首先也是最重要的是,您以提升的权限运行该命令。除非您已经知道结果,否则您永远不应该以提升的权限递归地执行任何操作。除非您确切知道自己在做什么,否则您绝对不应该删除任何具有提升权限的内容。下次用mv
。这样,如果你确实弄乱了某些东西,你可以把它移回去。
至于您实际造成的损害,即您删除了垃圾箱,可能不会造成多大损害,但您确实可能造成损害,特别是在以提升的权限运行该命令时。