是否会rm -rf *
删除当前目录中的所有文件/文件夹?我想确保通配符*
不会在上层目录中向上移动并擦除我的所有文件系统。:D
我记得chmod 777 .* -R
对chmod
隐藏文件进行过操作,它chmod
消耗了我所有的文件系统。显然,我是root用户。
是否会rm -rf *
删除当前目录中的所有文件/文件夹?我想确保通配符*
不会在上层目录中向上移动并擦除我的所有文件系统。:D
我记得chmod 777 .* -R
对chmod
隐藏文件进行过操作,它chmod
消耗了我所有的文件系统。显然,我是root用户。
Answers:
不,如果您不对外壳进行大量调整,则不会删除以开头的文件或目录.
。要删除它们,也可以显式列出它们
rm -rf .file .dir
或使用正确的glob模式(感谢Chris)
rm -rf .[^.]* ..?*
编辑这里的要点是,您不能使用.*
来匹配文件,例如.file
,因为.*
或.*?
也将匹配..
或.
。.[^.]*
匹配文件,例如.file
,而..?*
匹配文件,例如..foo
(*
匹配零个或多个字符,而?
恰好匹配一个)。
..?*
捕获以“ ..”开头的条目(例如..foo
)。
rm
。因此,用*删除目录的内容并不是最明智的方法,恕我直言。
xargs
有点超出这个问题的范围。例如,当shell抱怨参数列表过长时,可能会开始考虑这一点。
因为我认为这个问题更多是关于*的作用(而不是均方根),所以让我们尝试另一种方法。
如果不确定*的功能,可以先使用无害命令(例如echo)来“测试”。运行此命令之前,请尝试猜测如果在主目录中运行它们将显示什么。
echo *
echo .*
但是首先让我们创建一个游乐场,让我们可以与星星一起玩,看看最终会得到什么。
mkdir ~/star_test/
cd ~/star_test/
>.file1
>file2
现在在这个目录中,我们有:
cj@zap:~/star_test$ ls -1a
.
..
.file1
file2
现在注意使用echo命令将*扩展为什么:
cj@zap:~/star_test$ echo *
file2
cj@zap:~/star_test$ echo .*
. .. .file1
因此,让我们看看rm命令会发生什么
cj@zap:~/star_test$ rm -rf *
cj@zap:~/star_test$ ls -1a
.
..
.file1
如您所见,他仅删除了file2,因为*仅扩展为file2。如果键入rm -rf。*则与编写相同
rm -rf . .. .file1
老实说,这看起来并不有趣;)
希望这可以澄清您问题的*部分。
更新: 但是,正如Ankur Goel指出的那样,rm中内置了某种保护(对于shell命令来说有点不寻常:)
让我们创建一个新的游乐场:
cd ~/star_test/
mkdir -p test1/test2/test3
sudo chown root.root test1
cd test1/test2/test3/
>.file1
>file2
因此,现在我们又有了这个,但是如果rm开始发疯,则由root拥有的test1作为保护。
cj@zap:~/star_test/test1/test2/test3$ ls -a
. .. file2 .file1
cj@zap:~/star_test/test1/test2/test3$ echo .*
. .. .file1
因此,让我们删除所有内容:
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
看来rm没有删除。和..即使我们告诉他!
因此,经过长时间的回答,事实证明,使用以下命令删除目录中的所有内容都是安全的:
rm -rf * .*
但是我会谨慎使用,因为我不确定rm的所有实现都像这样!
是。rm -rf仅删除当前目录中的文件和文件夹,而不会提升文件树。rm也不会遵循符号链接并删除它们指向的文件,因此您不会意外修剪文件系统的其他部分。
清空整个文件夹(又避免此答案中讨论的“参数过多”)的一种简单得多的方法是简单地删除并重新创建目录本身。为了确保在符号链接目录中时此方法正常运行,请使用以下几行:
cd ..
rm -rf $(readlink -f yourdir) #remove the directory, treat the case of a symlink
# by using readlink, to recreate the linked-to directory
mkdir $(readlink -f yourdir) # recreate the directory to have it empty
cd yourdir
(如果您使用yourdir
而不是,则$(readlink -f yourdir)
仅在原始位置仍然满的情况下替换链接)
xargs
...
rm -rf ./*
并明确指定当前目录的原因……但是Ankur似乎说这没关系。