会rm -rf *删除当前目录中的所有文件/文件夹吗?我想确保通配符*不会在上层目录中向上移动并擦除我的所有文件系统。:D
我记得chmod 777 .* -R对chmod隐藏文件做的,它chmod编辑了我所有的文件系统。显然,我使用的是 root 帐户。
Ben*_*ier 16
不,如果您没有对 shell 进行大量调整,这将不会删除以.. 要删除它们,您也可以明确列出它们
rm -rf .file .dir
Run Code Online (Sandbox Code Playgroud)
或使用正确的 glob 模式(感谢 Chris)
rm -rf .[^.]* ..?*
Run Code Online (Sandbox Code Playgroud)
编辑这里的重点是你不能.*用来匹配文件.file,因为.*or.*?也将匹配..or .。.[^.]*匹配类似 的文件.file,而..?*匹配类似..foo(*匹配零个或多个字符,而?恰好匹配一个) 之类的文件。
mpe*_*ez0 13
如果要删除目录及其所有内容,则可以按名称chdir进入父目录和rm -rf该目录,绕过整个 globbing 问题。如果要删除内容但保留目录,最简单的方法是删除所有内容然后重新创建目录。
想出一个匹配所有可能的目录条目 save 的 glob 是很复杂的。和 ..; 很容易想出一个* .??*在实践中几乎总是有效的简单答案(例如,)。这对于交互式使用来说是可以的,因为它很容易记住,并且它不起作用的时间可以用 post-rm 来捕捉ls -a。对于脚本,执行全部删除并重新创建空目录更容易。
Joh*_*han 10
因为我认为这个问题更多是关于 * 做什么(而不是 rm),让我们尝试另一种方法。
如果您不确定 * 的作用,您可以先使用像 echo 这样的无害命令“测试”。在你运行这个之前,试着猜测如果你在你的主目录中运行它们会显示什么。
echo *
echo .*
Run Code Online (Sandbox Code Playgroud)
但首先让我们创建一个游乐场,这样我们就可以和星星一起玩,看看我们最终会得到什么。
mkdir ~/star_test/
cd ~/star_test/
>.file1
>file2
Run Code Online (Sandbox Code Playgroud)
现在在这个目录中我们有这个:
cj@zap:~/star_test$ ls -1a
.
..
.file1
file2
Run Code Online (Sandbox Code Playgroud)
现在注意 * 扩展为使用 echo 命令的内容:
cj@zap:~/star_test$ echo *
file2
cj@zap:~/star_test$ echo .*
. .. .file1
Run Code Online (Sandbox Code Playgroud)
那么让我们看看 rm 命令会发生什么
cj@zap:~/star_test$ rm -rf *
cj@zap:~/star_test$ ls -1a
.
..
.file1
Run Code Online (Sandbox Code Playgroud)
如您所见,他只删除了 file2,因为 * 仅扩展到 file2。如果你输入 rm -rf .* 这将与写作相同
rm -rf . .. .file1
Run Code Online (Sandbox Code Playgroud)
老实说,这看起来并不有趣;)
希望这可以澄清您问题的 * 部分。
更新: 然而,正如 Ankur Goel 指出的那样,rm 内置了某种保护(对于 shell 命令来说有点不寻常:)
让我们创建一个新的游乐场:
cd ~/star_test/
mkdir -p test1/test2/test3
sudo chown root.root test1
cd test1/test2/test3/
>.file1
>file2
Run Code Online (Sandbox Code Playgroud)
所以现在我们又有了这个,但是如果 rm 开始变得狂暴,root 拥有的 test1 作为保护。
cj@zap:~/star_test/test1/test2/test3$ ls -a
. .. file2 .file1
cj@zap:~/star_test/test1/test2/test3$ echo .*
. .. .file1
Run Code Online (Sandbox Code Playgroud)
所以让我们删除所有内容:
cj@zap:~/star_test/test1/test2/test3$ rm -rf .*
rm: cannot remove directory `.'
rm: cannot remove directory `..'
cj@zap:~/star_test/test1/test2/test3$ ls -a
. .. file2
Run Code Online (Sandbox Code Playgroud)
而且看起来 rm 没有删除 . 而且..即使我们告诉他!!!
因此,经过这么长的回答,事实证明使用以下命令删除目录中的所有内容是安全的:
rm -rf * .*
Run Code Online (Sandbox Code Playgroud)
但是我会小心使用它,因为我不确定 rm 的所有实现都是这样的!