安全替代OS X`rm`?


9

我习惯于rm别名更安全的东西。

我一直在使用osx-trash,但是一旦升级到Ruby 1.9.2,它就会停止工作。

trash-cli从Python上了解过,但是我更喜欢将文件移动到OS X中的“废纸folder”文件夹而不是另一个目录的东西。

有没有人有一个好的解决方案?


9
请不要习惯别名rm,而要习惯mv files/to/be/deleted ~/.Trash。它在整个系统中都是安全一致的。
阿斯姆斯

Asmus:您看到只有在Mac仅有1个分区的情况下,该方法才有效。如果有另一个分区,则移至〜/ .Trash并不是真正正确的(我的〜分区不够大)。
消失的

1
好吧,您应该在问题中提到您有多个分区!
slhck

1
消失:嗯,我认为mv这仍然是您最安全的选择。您可以轻松地在另一个分区Trash(或您喜欢的分区)上创建一个新文件夹,然后mv在其中创建文件。一旦确定可以删除它们,请删除并重新创建该完整文件夹。
阿斯姆斯

然后将〜/ .Trash变成具有足够空间的分区上Trash文件夹的软链接
AlcubierreDrive 2012年

Answers:


8

对于OSX,您可以使用 safe-rm

brew install safe-rm

您需要执行一个额外的步骤以使其优于默认设置rm-添加符号链接。

echo $PATH

对我来说,我/usr/local/bin:首先拥有与safe-rminstall 相同的目录

将符号链接添加到 safe-rm

ln -s /usr/local/bin/safe-rm /usr/local/bin/rm

要删除并恢复默认设置,rm您可以删除符号链接rm /usr/local/bin/rm

可以在以下位置添加配置文件 /etc/safe-rm.conf

例如:

/private
/Applications
/Developer
/Library
/Network
/System
/Users
/Volumes
/test

测试rm -rf /test它会拒绝从中删除safe-rm.conf


将其添加/到不应删除的路径列表中可能会很好,以防止经典rm -fr /
MikaelLepistö17年

3

hasseg.org/trash是一个Objective-C实用程序,如osx-trash

我编写了一个shell函数,该函数不会覆盖文件mv * ~/.Trash。但是,它始终将项目移动到启动卷。

trash() {
    for f in "$@"; do
        bn=$(basename "$f")
        while [ -e ~/.Trash/"$bn" ]; do
            bn="$bn $(date +%H.%M.%S %p)"
        done
        mv "$f" ~/.Trash/"$bn"
    done
}

是的,我有超过1分,我会想保持在同一个分区被删除的文件,而不是整个移动它们
disappearedng

我添加了到其他两个实用程序和另一个功能的链接。它们每个都应将文件保留在同一分区上。
Lri 2011年

2

简介(您可以跳过)

对我来说rm -i就足够了,因为它会在删除任何文件之前提示您。但是,提供的一些额外安全性safe-rm并不是一个坏主意。

一个简单的aliaslike rm=safe-rm -i 可能就足够了,但是rm -rf将不起作用,因为-i已被覆盖-f

因此,我们必须确保-i始终紧追其后-f


我的解决方案(3个步骤):

  • 安装safe-rm: brew install safe-rm

    您仍然可以使用rm,但是RM_BIN在下一步中已修改

  • 编辑您的~/.profile(或bash_profile或其他内容),然后放入以下代码段(其中包含aliasfunction):

    alias rm="rm_i"
    
    function rm_i(){
    RM_BIN=safe-rm # you can replace it with regular rm if you like
    
    args=""
    files=""
    argsDone=0 # to make sure arguments are before the files
    
    for var in "$@"
    do
        if [[ $var == \-* ]] ; then
            if [ $argsDone -eq 1 ] ; then
                $RM_BIN # just to show the usage of rm
                return
            fi
            args+=" $var"
        else
            argsDone=1
            files+=" $var"
        fi
    done
    
    args+=" -i" # Put -i at the end (so rm -rf will not ignore it)
    
    $RM_BIN $args $files
    }
    
  • 最后logoutlogin,因此将应用.profile中的更新。注销/登录前请勿使用它!


笔记:

  • 只需稍加修改即可将其应用于任何Linux发行版。
  • 它不会使您的员工陷入困境。它只是在删除每个文件之前询问您!
  • -rf与正则表达式一起使用。
  • 如果您确实要使用而rm -rf 无需询问每个文件/文件夹,则仍然可以使用/bin/rm -rf(或safe-rm -rf是否已安装)。
  • 不再有无意 rm -rf rm * ;)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.