我不小心删除了一堆不应该删除的文件。我希望将来实施某种安全网来保护我的文件。
我希望每次我rm *
在终端中输入内容时,它都会询问我是否确定要删除所有文件。有小费吗?
答案1
打字
rm *
本身就应该敲响警钟。这是一个完全合法的命令,需要不时执行,但在执行之前,您应该检查您是否位于正确的目录中(也许使当前目录成为提示符的一部分?),该目录*
将与以下文件名匹配您要删除的文件(您可以使用 进行检查echo *
)等。
那里是-i
您可以使用的选项,rm
在删除文件之前会要求确认。创建一个别名随着时间的rm
推移rm -i
,事实证明人们会开始依靠使用此选项可以捕获愚蠢的错误,在未设置别名的情况下,这会导致令人讨厌的意外。因此,最好在按 之前养成思考的习惯Enter,特别是在运行删除文件(或覆盖文件或截断文件)的操作时。
或者,或者(并且!)对您不想丢失的所有内容保留每小时可用的备份。我推荐restic
或borgbackup
用于异地备份。
答案2
最佳实践,也是我多年来一直在做的,是在我的 shell 中激活自动完成功能,然后按标签(或将此功能映射到的任何键),这样您就可以看到按下该键后 * 将扩展到的文件。
另外,我添加了一个 rm 别名,如下所示:
alias rm='nocorrect rm -Iv'
不正确在我的 shell Zsh 中输入 rm 时,基本上会忽略有时多余的自动更正消息。假设您有一个名为雷米在您当前的目录中,或者有一个名为雷米, noright 会处理这个问题。
-我用于当 rm 删除超过 3 个文件或递归删除时的提示,即目录。
- -v对于详细来说,只是看看 rm 正在删除什么;我可能只想取消此操作(Ctrl-c)如果由于某种原因我删除了错误的文件。很少使用,但很高兴看到这个过程。
答案3
如果使用tcsh
shell,您可以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”的习惯。除非必要,否则避免使用开放式*。