Gre*_*ory 7 command-line shell wildcards dot-files
我使用 Ubuntu 14.04,并在终端中使用 sudo su 成为 root,我想手动删除 root 的垃圾箱。除了一些以点开头的文件外,它删除了所有内容。像 .htaccess 等。所以我去了那个目录(这是“文件”),我运行了这个命令:
rm -rf .*
Run Code Online (Sandbox Code Playgroud)
它确实删除了这些文件,但我也收到一条错误消息,系统无法删除“。” 和“..”是什么意思?就像我试图删除整个目录树一样?就像我说的,当我运行该命令时,我位于最低目录中。准确地说是这个:/root/.local/share/Trash/files/ 我击落了我的电脑,然后打开了它。乍一看,一切似乎都很正常。所以现在我想问的是出了什么问题,我所做的是否真的会对系统造成任何严重损害?换句话说,我现在应该担心还是一切都好?
当你想删除所有的点文件时,约定是使用这个命令:
rm .??*
Run Code Online (Sandbox Code Playgroud)
这将开始删除包含至少两个其他字符,从而留下一个点的所有文件.
和..
完整。当然,它也会遗漏点后只有一个字母的文件名,但这种情况应该很少见。
.*
匹配名称以.
.开头的所有文件。每个目录都包含一个.
引用目录本身的文件,以及一个..
引用父目录的文件。.*
包括那些文件。
幸运的是,尝试删除.
或..
失败,因此您会得到一个无害的错误。
在 zsh 中,.*
不匹配.
或..
。在 bash 中,您可以设置
GLOBIGNORE='.:..:*/.:*/..'
Run Code Online (Sandbox Code Playgroud)
然后*
将匹配所有文件,包括点文件,但不包括.
和..
。
或者,您可以使用明确排除.
和的通配符模式..
:
rm -rf .[!.]* ..?*
Run Code Online (Sandbox Code Playgroud)
或者
rm -rf .[!.] .??*
Run Code Online (Sandbox Code Playgroud)
或者,使用find
.
find . -mindepth 1 -delete
Run Code Online (Sandbox Code Playgroud)