双重检查删除通配符

双重检查删除通配符

我不小心删除了一堆不应该删除的文件。我希望将来实施某种安全网来保护我的文件。

我希望每次我rm *在终端中输入内容时,它都会询问我是否确定要删除所有文件。有小费吗?

答案1

打字

rm *

本身就应该敲响警钟。这是一个完全合法的命令,需要不时执行,但在执行之前,您应该检查您是否位于正确的目录中(也许使当前目录成为提示符的一部分?),该目录*将与以下文件名匹配您要删除的文件(您可以使用 进行检查echo *)等。

那里-i您可以使用的选项,rm在删除文件之前会要求确认。创建一个别名随着时间的rm推移rm -i,事实证明人们会开始依靠使用此选项可以捕获愚蠢的错误,在未设置别名的情况下,这会导致令人讨厌的意外。因此,最好在按 之前养成思考的习惯Enter,特别是在运行删除文件(或覆盖文件或截断文件)的操作时。

或者,或者(并且!)对您不想丢失的所有内容保留每小时可用的备份。我推荐resticborgbackup用于异地备份。

答案2

最佳实践,也是我多年来一直在做的,是在我的 shell 中激活自动完成功能,然后按标签(或将此功能映射到的任何键),这样您就可以看到按下该键后 * 将扩展到的文件。

另外,我添加了一个 rm 别名,如下所示:

alias rm='nocorrect rm -Iv'
  • 不正确在我的 shell Zsh 中输入 rm 时,基本上会忽略有时多余的自动更正消息。假设您有一个名为雷米在您当前的目录中,或者有一个名为雷米, noright 会处理这个问题。

  • -我用于当 rm 删除超过 3 个文件或递归删除时的提示,即目录。

  • -v对于详细来说,只是看看 rm 正在删除什么;我可能只想取消此操作(Ctrl-c)如果由于某种原因我删除了错误的文件。很少使用,但很高兴看到这个过程。

答案3

如果使用tcshshell,您可以rmstar为此设置变量:

tcsh> set rmstar
tcsh> touch file
tcsh> rm *
Do you really want to delete all files? [N/y]

但这并不适用于

tcsh> rm ./*
tcsh>

太糟糕了,这rm ./*确实是你应该做的。rm *是不安全的,因为如果存在名称以-.

zsh调整并改进了该tcsh功能并将其设为默认功能:

zsh$ rm ./*
zsh: sure you want to delete the only file in /home/chazelas/. [yn]?
zsh$ rm foo /*
zsh: sure you want to delete all 33 files in / [yn]?

(请注意,它发生 rm甚至参与其中。在您按 ) 之前,以上内容foo不会被删除y

你可以禁用它

set -o rmstarsilent

rmstarwait对于喜欢触发的用户甚至还有一个选项:

RM_STAR_WAIT:

如果在执行 'rm 之前查询用户' 或 'rm 路径/',首先等待十秒钟并忽略这段时间输入的任何内容。这避免了当人们无意时条件反射地回答“是”的问题。通过扩展 ZLE 中的“*”(带制表符),始终可以避免等待和查询。

绕过该检查的另一种方法是使用rm ./**.

答案4

养成使用“rm -i”的习惯。除非必要,否则避免使用开放式*。

相关内容