在 bash shell 中,`rm -rf ./*` 比 `rm -rf *` 更好/更安全吗?

在 bash shell 中,`rm -rf ./*` 比 `rm -rf *` 更好/更安全吗?

在 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任何形式的通配符时要小心。

相关内容