rm の呼び出しをインターセプトし、ファイルを完全に削除するのではなく、ゴミ箱に移動する方法はありますか?
答え1
あります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 ターミナル セッション内でのみ機能します。
これで終わりです。
答え2
ゴミ(Ubuntu のパッケージ libtrash) はこれを実行するようですが、私は使用したことはありません。