忽略来自 .bashrc 的标志

Ignore flag from .bashrc

我不想再让 rm -f 毁了我的一天,但我没有自制力停下来。我想在我的 bashrc 中做一些事情让 "rm" 忽略“-f”标志。

我目前的.bashrc 技巧(别名和函数)似乎无法解决这个问题。如果我给 "rm" 添加别名或用一个函数替换它,我会覆盖实际的 "rm" 并且不能再删除任何东西。我可以在我的 .bashrc 中做什么来让 "rm" 忽略“-f”?

这就完成了工作。它会阻止您使用 -f,但仍应允许您删除其中包含“-f”的文件,只要该文件的名称不是仅由有效的 "rm" 选项组成即可。如果您有一个这样命名的文件,您可以在 "rm" 之前重命名它。这是为 OSX 编写的,因此会准确查找 OSX 识别为 rm 标志的选项。

function rm() {
    for arg
    do
        if [[ $arg == *"f"* ]] && [[ $arg =~ ^-[dfiPRrvW]+$ ]]
        then
            echo "rm is trying to -f!"
            return 1
        fi
    done

    command rm "$@"
}

编辑:将return代码更改为1

我想对这种方法提出警告,因为您会习惯这种保护 - 有一天您可能会在一台外国机器上工作,而不是您自己的机器,没有进行此类修改,然后麻烦就来了可能会大很多。

我可能会建议另一种方法:
我通过每 10 分钟对 homedirs(和其他一些关键区域)进行 运行 增量备份来适当地解决此类问题(意外删除)。如果您主要从事开发或编辑工作(中小型文件),这非常有效,如果您处理大型媒体文件或类似文件,则效果不佳。我已经从备份中排除了下载和媒体以及 .cache。我正在使用 bacula,对于初学者来说配置起来可能不太容易,但周围还有其他工具。使这项工作正常进行需要做一些工作,但多年来它让我省去了足够多的麻烦,我认为这是值得的。
使这项工作所需的主要事情是存储备份的地方。这通常在作为备份服务器的另一台机器上,但对于意外删除的问题,它也可能是同一台机器上的一些受保护的文件空间。今天它甚至可能在网络上(但要注意安全问题)。