web-dev-qa-db-ja.com

OS X `rm`の安全な代替品?

私はrmを使ってより安全なエイリアスを作成することに慣れています。

osx-trashを使用していますが、Ruby 1.9.2にアップグレードすると、これは機能しなくなります。

Pythonのtrash-cliについては知っていますが、ファイルを別のディレクトリではなく、OSXのごみ箱フォルダに移動するものをお勧めします。

誰かが良い解決策を持っていますか?

9
disappearedng

OSXの場合、 safe-rm を使用できます

brew install safe-rm

デフォルトのrmよりも優先するには追加の手順を実行する必要があります-シンボリックリンクを追加します。

echo $PATH

私の場合、最初に/usr/local/bin:があり、safe-rmインストールと同じディレクトリです。

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からの削除が拒否されます

8
David Thomas

hasseg.org/trashosx-trash のようなObjective-Cユーティリティです。

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
}
3
Lri

はじめに(スキップできます)

ファイルを削除する前にプロンプ​​トが表示されるので、私にとってはrm -iで十分です。ただし、safe-rmによって提供される追加のセキュリティはまったく悪い考えではありません。

rm=safe-rm -icouldのような単純なaliasで十分ですが、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
    }
    
  • 最後にlogoutおよびloginなので、.profileの更新が適用されます。 しないでくださいログアウト/ログインの前に使用してください!


注:

  • わずかな変更を加えるだけで、あらゆるLinuxディストリビューションに適用できます。
  • それはあなたのスタッフをスラッシュに動かしません。各ファイルを削除する前に尋ねるだけです!
  • -rfおよび正規表現で機能します。
  • 本当にrm -rf[〜#〜] [〜#〜]を使用したい場合は、すべてのファイル/フォルダーに対して要求されることなく、/bin/rm -rf(またはsafe-rm -rfインストールした場合)。
  • これ以上意図的ではありませんrm -rfまたはrm *;)
2
Paschalis