Rmへの呼び出しを傍受し、ファイルを永久に削除する代わりに、それらをゴミ箱に移動する方法はありますか?
これには webupd8.orgのレシピ があります。リンクの腐敗を防ぐために、ここに重要な情報をいくつか追加します
Sudo apt-get install trash-cli
これにより、trash
、empty-trash
、list-trash
、およびrestore-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ターミナルセッションでのみ機能します。
そしてそれはそれであるはずです。
libtrash (Ubuntuのlibtrashパッケージ)はこれを行うようですが、私は使用したことがありません。