在 Linux bash shell 中,我看到有人输入 ,rm -rf ./*
因为他想删除当前文件夹的所有文件和文件夹。我想知道输入./*
而不是有什么好处*
?
我认为最好使用更简单的形式,rm -rf *
因为它更短,并且如果您不小心在和这rm -rf ./*
之间添加空格,则可能会造成灾难()。.
/
rm -rf . /*
我对吗 ?
答案1
更好的解决方案是rm -rf ./*
。 Shell 通配符在命令执行之前被展开,并且对文件名没有明显的限制,这意味着某些类型的文件名可能会影响命令执行本身。以下是一个例子:
# Create a playground
mkdir fun
cd fun
# Create four files
touch x y z ./-i
ls # Output is four files: -i x y z
# Remove them per the original question
rm -rf *
此时,命令 - 和通配符 - 被 shell 扩展如下:
rm -rf -i x y z
结果是,在rm
运行时它会看到另一个选项(-i
),它会否定-f
并将其转变为交互模式:
rm: remove regular empty file 'x'?
...
请注意,即使您回答了y
有关删除文件的每个问题,您仍然不会得到一个空目录 - 该文件-i
将保留。
正确的解决方案是在文件集前加上前缀--
(POSIX 指南 10),它告诉许多命令停止解析命令行以获取参数,或者只是使用./*
而不是*
:
rm -rf -- *
rm -rf ./*
(要删除文件-i
,当然您只需这样做即可rm ./-i
。)
哦,回应你的“rm -rf . /*
可能会引发灾难“——是的,可以,因此使用rm -rf
任何形式的通配符时要小心。