rmへの呼び出しを傍受し、削除されたファイルを代わりにゴミ箱に送る


10

rmへの呼び出しをインターセプトし、ファイルを永久に削除する代わりにゴミ箱に移動する方法はありますか?


どのくらい普遍的ですか?すべてのユーザーまたはプロセスによるすべてのrm呼び出しを意味しますか?または、bashを使用している間だけですか?または
。– djeikyb

回答:


13

このためのwebupd8.orgのレシピがあります。リンクの腐敗を防ぐために、重要な情報をいくつか紹介します。

sudo apt-get install trash-cli

このインストールされますtrashempty-trashlist-trashrestore-trashあなたはそのまま使用したりすることができますコマンドrmのエイリアスは、trash(下記参照します)。

trashコマンドのセマンティクスは標準とは少し異なりますrm- -rディレクトリを削除できるようにするためにフラグは必要ありません。これが気になる場合は、webupd8.orgが次のスクリプトを提案します。これをPATHに入れて呼び出すことができますtrash-rm

#!/bin/bash
# command name: trash-rm
shopt -s extglob
recursive=1
declare -a cmd
((i = 0))
for f in "$@"; do
    case "$f" in

        (-*([fiIv])r*([fiIv])|-*([fiIv])R*([fiIv]))
            tmp="${f//[rR]/}"
            if [ -n "$tmp" ]; then
                #echo "\$tmp == $tmp"
                cmd[$i]="$tmp"
                ((i++))
            fi
            recursive=0
        ;;

        (--recursive) recursive=0
        ;;

        (*)
            if [ $recursive != 0   -a  -d "$f" ]; then
                echo "skipping directory: $f"
                continue
            else
                cmd[$i]="$f"
                ((i++))
            fi
        ;;

    esac
done
trash "${cmd[@]}"

Ubuntu 12.04以降では、スクリプトの最後のコマンドtrash-put "${cmd[@]}"trash "${cmd[@]}"(コマンドがからtrashに変更されたためtrash-put)ではなく、にする必要があります。

次に、スクリプトを実行可能にします。

chmod +x trash-rm

のディレクトリに配置したらPATH、〜/ .bashrcにエイリアスを追加します。これにより、bashが実際のrmコマンドの代わりにスクリプトを呼び出すようになります。

alias rm="trash-rm"

djeikybが正しく指摘しているように、.bashrcエイリアストリックは、.bashrcが変更されたユーザーに対してのみ機能し、bashターミナルセッションでのみ機能します。

そして、それはそれであるはずです。


これは良い答えですが、エイリアスを使用するという主要な概念を強調するように再編成したほうがよいでしょう。rmを「傍受」する方法を理解することが最も重要だと思います。その場所で何が起こるかは、いくつもの方法でカスタマイズできます。
djeikyb

また、これはユーザーのbashセッションのrmコマンドにのみ影響することにも言及しておくとよいでしょう。
djeikyb

@djeikyb:提案をありがとう、答えを更新しました
セルゲイ

スクリプトがなくてもインストールできます(インストールしてを追加するだけalias="trash"です)。スクリプトを作成する利点は何ですか。
デスグア2012年

@desgua:スクリプトの目的は、ディレクトリの削除に関して、trashより振る舞うようrmにすることです。これrmは、たとえば、動作することを期待する一部のスクリプトにとって重要になる場合があります。答えを更新しました。
セルゲイ

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.