Linux のコマンドラインでファイルを消すとき、反射的に rm を使う人は多い。しかし rm は基本的にゴミ箱を経由しない完全削除であり、操作ミスに弱い。
GNOME / GLib 系の環境では、gio trash を使うことで、ファイルやディレクトリを GUI のファイルマネージャと同じようにゴミ箱へ移動できる。gio trash は gio コマンドのサブコマンドで、Trash の一覧表示、復元、空にする操作にも対応している。Ubuntu や Arch Linux の manpage でも、gio trash --list、--restore、--empty などが説明されている。(Ubuntu Manpages)
gio trash とは
gio は GLib/GIO が提供するコマンドラインツールで、ローカルファイルだけでなく、GIO が扱える URI や仮想ファイルシステムに対して操作できる。
その中の trash サブコマンドが gio trash である。
gio trash FILE...
これは rm FILE のように即座に削除するのではなく、対象を Trash、つまりゴミ箱へ送る。
GNOME Files、旧称 Nautilus、でファイルを右クリックして「ゴミ箱へ移動」する操作に近い。GVfs は GIO のためのユーザー空間仮想ファイルシステム実装で、trash、SFTP、SMB、WebDAV などのバックエンドを含む。(wiki.gnome.org)
基本的な使い方
ファイルをゴミ箱へ送る
gio trash memo.txt
複数ファイルも指定できる。
gio trash a.txt b.txt c.txt
ディレクトリも対象にできる。
gio trash old-project/
この操作では、可能であれば元の場所に復元できるよう、ゴミ箱側にメタデータが保存される。
ゴミ箱の中身を確認する
gio trash --list
または次のように trash:// を一覧表示することもできる。
gio list trash://
Arch Linux の manpage では、ゴミ箱の確認方法として gio trash --list または gio list trash:// が示されている。(Archマニュアルページ)
例:
trash:///memo.txt /home/user/Documents/memo.txt
trash:///old-project /home/user/work/old-project
表示形式は環境やバージョンで多少異なるが、基本的には Trash 内の URI と元の場所を確認できる。
ゴミ箱から復元する
復元には --restore を使う。
gio trash --restore trash:///memo.txt
重要なのは、復元対象には通常のパスではなく、trash:// で始まる URI を指定する点である。
Ubuntu の manpage でも、--restore は Trash から元の場所へ復元し、指定には trash:// で始まる URI を期待すると説明されている。元のディレクトリが存在しない場合は再作成される。(Ubuntu Manpages)
典型的な流れは次の通り。
gio trash --list
gio trash --restore trash:///memo.txt
ゴミ箱を空にする
ゴミ箱を完全に空にするには次を使う。
gio trash --empty
これは取り消しにくい操作なので注意する。gio trash は安全な削除のために便利だが、--empty は最終削除に近い。
存在しないファイルを無視する
-f または --force を使うと、存在しないファイルや削除できないファイルを無視する。
gio trash -f maybe-exists.txt
Arch Linux の manpage では、-f, --force は存在しないファイルや trash 不可能なファイルを無視するオプションとして説明されている。(Archマニュアルページ)
rm との違い
| コマンド | 動作 | 復元 |
|---|---|---|
rm file | ファイルを削除 | 通常は困難 |
gio trash file | ゴミ箱へ移動 | 可能 |
gio trash --empty | ゴミ箱を空にする | 通常は困難 |
rm はスクリプトや一時ファイル削除には強力だが、手作業での削除には危険な場合がある。特に次のような場面では gio trash のほうが安全である。
gio trash ~/Downloads/*
gio trash old-report.pdf
gio trash tmp-output/
ただし、gio trash はあくまで「ゴミ箱に送る」コマンドであり、バックアップの代替ではない。
gvfs-trash との関係
古い記事では gvfs-trash というコマンドが紹介されていることがある。
gvfs-trash file.txt
しかし現在は gio trash を使うのが一般的である。Ubuntu 系の情報でも、gvfs-trash は deprecated であり、gio trash を使うよう案内される例が示されている。(Ask Ubuntu)
新しく設定するなら、gvfs-trash ではなく gio trash を使うべきである。
trash-cli との違い
Linux CLI でゴミ箱を扱うツールとしては、trash-cli もよく使われる。
trash-put file.txt
trash-list
trash-restore
trash-empty
両者の使い分けは次のように考えるとよい。
| 用途 | 向いているもの |
|---|---|
| GNOME / GLib 系環境で標準機能を使いたい | gio trash |
| デスクトップ環境に依存しにくい CLI ツールがほしい | trash-cli |
| 復元操作を対話的にやりたい | trash-cli |
すでに gio が入っている環境で軽く使いたい | gio trash |
GNOME デスクトップや GLib/GVfs が入っている環境では、gio trash は追加インストールなしで使えることが多い。一方、サーバーや最小構成の環境では入っていない場合もある。
シェル alias の例
rm の代わりに使いやすくするなら、別名を付けるのがよい。
alias del='gio trash'
alias trash='gio trash'
~/.bashrc や ~/.zshrc に書く。
echo "alias del='gio trash'" >> ~/.bashrc
source ~/.bashrc
これで次のように使える。
del old.txt
del old-directory/
rm 自体を置き換える alias も可能ではある。
alias rm='gio trash'
しかしこれは推奨しにくい。スクリプト、システム管理作業、他人の端末操作で挙動の前提が崩れるからである。安全にしたいなら、rm はそのまま残し、del や trash のような別名を使うほうがよい。
注意点
1. すべてのファイルシステムで同じように動くとは限らない
Trash の場所は対象ファイルのある場所によって変わることがある。Red Hat のドキュメントでも、ホームディレクトリ配下では通常 $XDG_DATA_HOME/Trash が使われるが、ファイルの場所によって Trash の場所が異なる場合があり、すべてのファイルシステムがこの概念をサポートするわけではないと説明されている。(Red Hat Documentation)
2. sudo gio trash は避ける
root 権限で gio trash を実行すると、ユーザーのゴミ箱ではなく root 側の環境や権限で処理される可能性がある。通常の自分のファイルは、通常ユーザーで実行する。
gio trash file.txt
どうしても root 所有ファイルを消す必要がある場合は、ゴミ箱運用よりも削除ポリシーを明確にした上で sudo rm などを使う場面が多い。
3. 復元には trash:// URI が必要
次のような指定は失敗することがある。
gio trash --restore /home/user/Documents/memo.txt
復元対象は gio trash --list で確認し、trash://... の形式で指定する。
gio trash --restore trash:///memo.txt
実用例
Downloads 配下の不要ファイルをゴミ箱へ送る
gio trash ~/Downloads/*.zip
カレントディレクトリの .log をまとめてゴミ箱へ送る
gio trash ./*.log
ゴミ箱の中身を確認してから空にする
gio trash --list
gio trash --empty
削除用 alias を設定する
cat >> ~/.bashrc <<'EOF'
alias del='gio trash'
alias trash='gio trash'
EOF
source ~/.bashrc
まとめ
gio trash は、Linux のコマンドラインからファイルを安全にゴミ箱へ送るための実用的なコマンドである。
gio trash file.txt
gio trash --list
gio trash --restore trash:///file.txt
gio trash --empty
rm は即時削除、gio trash はゴミ箱への移動である。この違いを理解して使い分けるだけで、CLI 作業中の誤削除リスクをかなり下げられる。
日常的な手作業では gio trash、明確に完全削除したい場面では rm、という分担にしておくのが現実的である。