如何防止意外执行 rm -r *命令?

如何防止意外执行 rm -r *命令?

有时候我会使用命令删除一些文件。例如,文件名称可能以“a”开头,所以我会使用命令删除rm -r a*,但我不想意外删除其他目录。如何锁定目录以防止被删除rm -r

答案1

您可以在 shell 中将该rm命令设置为别名,这样它会要求您对每个文件进行确认。rm -i

然而,有些人认为这是有害的。参见别名 rm=“rm -i” 被认为有害吗?在 Superuser.com 上

其他想法如何防止意外 rm -rf /?*在 StackOverflow.com 上。

答案2

最好的建议是逐渐对“rm -r”或“rm -rf”命令产生足够的敬畏和尊重,这样,当你输入这些命令时,你会停下来,慢慢地、小心地进行操作(仔细阅读命令几遍)。这些命令很有用,有时需要使用 - 但欺骗系统来避免这种错误并不是一个好主意;习惯于这样的解决方法也不是一个好主意---考虑养成可以从一台机器转移到另一台机器的好习惯。

答案3

如果您想有选择地删除项目,则可以使用find

find . -name "a*" \! -type d -delete

您可以通过运行以下命令检查要删除的内容:

find . -name "a*" \! -type d -print

例如,创建一些目录和文件:

mkdir -p testDir/a/b 
cd testDir
touch apple.txt banana.txt ant.tx a/antelope.txt a/bus.txt a/b/apostrophe.txt a/b/bug.txt

查看文件和目录:

find . -name "*" -print

返回:

.
./a
./a/antelope.txt
./a/b
./a/b/apostrophe.txt
./a/bus.txt
./ant.tx
./apple.txt
./banana.txt

要验证删除的内容:

find . -name "a*" \! -type d -print

返回:

./a/antelope.txt
./a/b/apostrophe.txt
./ant.tx
./apple.txt

要删除文件:

find . -name "a*" \! -type d -delete

要验证是否只有 a* 文件被删除:

find . -name "*" -print

返回:

.
./a
./a/b
./a/bus.txt
./banana.txt

答案4

除了这里的其他答案之外,我建议您多使用制表符补全,少使用通配符。从您的问题来看,您似乎想删除单个文件,但不想输入全名。在这种情况下,*您应该点击而不是Tab。制表符补全更安全。

如果您确实想删除名称与 glob 匹配的多个文件,那么最好的方法(正如前面所指出的)是在按下 Enter 键之前三思而后行。此外,如果您使用备份解决方案,在进行所有更改时对其进行备份,您就可以更加放心,这样您就可以随时恢复任何错误,而不会有数据丢失的风险。

相关内容