rmの代わりにtrashを使ってCoding Agentに安全にファイルを削除させる
LinuxやmacOSのターミナルでファイルを削除するとき rm コマンドを使います。特にCoding Agentは頻繁にrm を使ってファイルを削除しがちです。
rm は強力で、削除したファイルは基本的に復元できません。
特に rm -rf のようなコマンドは、誤操作すると重要なデータを一瞬で消してしまう危険があります。このコマンドをClaude CodeのようなCoding Agentに使わせたくない方も多いと思います。
rmを使わずに、Coding Agentにファイルやディレクトリを安全に削除させたい...!
今回の記事ではtrash コマンドについて簡単に説明します。
trashコマンドとは
trash コマンドを使うと、ファイルを削除する代わりにゴミ箱へ移動できます。GUIでの削除と同じ仕組みを使うため、後から復元が可能です。
そのため、rm の代替として非常に有用です。rmを無効化して、trash を使う運用にすることで、誤って重要なファイルを削除するリスクを減らせます。
trashのインストール
macOS
最近のmacOSでは標準で trash コマンドが利用可能です。
$ which trash
/usr/bin/trash
標準で入っているため、基本的にはインストールの必要はありません。
しかし、OSのバージョンが古い場合は入っていない可能性もあります。その場合はHomebrewでインストールできます。
brew install trash
インストールしたら指示に従ってパスを通しましょう。
echo 'export PATH="/opt/homebrew/opt/trash/bin:$PATH"' >> ~/.zshrc
ちなみに、homebrewに trash と trash-cli という2つのパッケージがありますが、macOSではインストール数の多い trash をインストールすればOKです。
Linux
sudo apt install trash-cli
Linuxでは trash-cli というパッケージ名のものがオススメです。インストール後は trash-put でコマンドが使えます。
READMEにあるように、Debian(Ubuntu), Arch, Fedoraなどの各ディストロにも対応しています。
基本的な使い方
使い方はすごく簡単です。
ファイルをゴミ箱へ移動したいときはこれだけ。
trash file.txt
ワイルドカードも使えるため、複数ファイルをまとめて削除することもできます。
trash *.log
ディレクトリもそのままゴミ箱に移動できます。
trash directory
rmをtrashに置き換える
安全性を高めるために、rm を trash に置き換えてみましょう。
例えば、シェルのエイリアスを設定します。
alias rm='trash'
これを .bashrc や .zshrc に書くことで、rm を実行したときに自動的に trash が使われます。
trashコマンドはディレクトリを削除するとき、-rオプションや-fオプションを付けずに使用できます。なので、Coding Agent向けに、オプションそのものを無視するように設定するのも良いでしょう。
以下のようなシェル関数をzshrcに書くと、使い勝手が良いと思います。
rm() {
while [[ "$1" == -* ]]; do
shift
done
trash "$@"
}
rmの無効化だけをしたいとき
置き換えるのが嫌な場合は、rm コマンドを無効化しつつ、ターミナルに出力させるのも手です。
rm() {
echo "rmは無効化されています。trashを使用してください。" >&2
return 1
}
エラーメッセージなので stderr に出すために>&2としています。また、return 1とすることで失敗のステータスを返すことができます。
このように書くことで、スクリプトの途中でrmがあっても、無効化されていることがわかるようになります。
ターミナルにエラーメッセージが出るため、Coding Agentもrmが無効化されている&trashを使えば良いことを認識できるようになります。
まとめ
Coding Agentが誤って重要なファイルを削除してしまうリスクを減らすために、trash コマンドの利用、すごくオススメです!
(普段使いでも便利!)
Discussion