OS X `rm`の安全な代替物ですか?


9

rmより安全なものをエイリアスする必要があることに慣れています。

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

trash-cliPython については知っていますが、別のディレクトリではなく、OS XのTrashフォルダーにファイルを移動するほうがはるかに好きです。

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


9
エイリアスrmに慣れるのではなく、慣れてくださいmv files/to/be/deleted ~/.Trash。安全システム全体一貫しています。
Asmus

Asmus:Macにパーティションが1つしかない場合にのみ機能することがわかります。別のパーティションがある場合、〜/ .Trashへの移動は実際には正しくありません(私の〜パーティションは十分な大きさではありません)。
消滅

1
さて、あなたはあなたがあなたの質問であなたが複数のパーティションを持っていることを述べたはずです!
slhck '25

1
非表示:まあ、私mvはまだあなたの最も安全な賭けだと思います。他のパーティションと呼ばれるTrash(または好きなように)新しいフォルダーを簡単に作成し、mvそこにファイルを作成できます。削除できることを確認したら、その完全なフォルダを削除して再作成します。
Asmus

そして、〜/ .Trashを十分なスペースがあるパーティション上のTrashフォルダーへのソフトリンクにすることができます
AlcubierreDrive

回答:


8

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


また、追加することは良いかもしれません/古典のrm -fr /予防するために、削除すべきではないパスのリストに
ミカエルLepistö

3

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
}

うん、私は、1つの以上のパーティションがあると私は同じパーティションに削除されたファイルを保持したいと思うのではなく全体にそれらを動かす
disappearedng

他の2つのユーティリティと別の関数へのリンクを追加しました。それらのそれぞれは、同じパーティションにファイルを保持する必要があります。
Lri

2

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

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

簡単なaliasようには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
    }
    
  • 最後にlogoutそしてlogin、.profileファイルでの更新が適用されているそう。ログアウト/ログインの前に使用しないでください!


ノート:

  • わずかな変更を加えれば、どのLinuxディストリビューションにも適用できます。
  • それはあなたのスタッフをスラッシュに動かしません。各ファイルを削除する前に確認するだけです!
  • -rf正規表現と一緒に動作します。
  • あなたが本当に使いたい場合はrm -rf なしすべての単一のファイルを要求されている/あなたはまだ使用できるフォルダ/bin/rm -rf(またはsafe-rm -rfあなたがそれをインストールしていた場合)。
  • これ以上意図的では rm -rf ない rm * ;)
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.