如何删除当前目录中以点开头的所有文件?

如何删除当前目录中以点开头的所有文件?

我使用 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。这样,如果你确实弄乱了某些东西,你可以把它移回去。

至于您实际造成的损害,即您删除了垃圾箱,可能不会造成多大损害,但您确实可能造成损害,特别是在以提升的权限运行该命令时。

相关内容