ファイルマネージャを使ってファイルを削除するとファイルはゴミ箱に移動して、ゴミ箱を削除しない限りデータは残っています。しかしrmコマンドを使ってファイルを削除すると完全にデータは削除されてしまいます。trash コマンドは、指定したファイルをゴミ箱に移動してくれるのでうっかりファイルを削除してしまっても安心です。
trash コマンドは、以下のコマンドでインストールします。
$ sudo apt install trash-cli
ファイル、ディレクトリの削除は以下のように行います。
$ trash-put sampledir/ sample.txt
~/.bashrc に以下のように記述しておけば rm コマンドをtrash-put コマンドに置き換える事が出来るので、rmコマンドでうっかりファイルを削除することを防げます。
[~/.bashrc]
alias rm='trash-put'
設定を読み込みます。
$ source ~/.bashrc
ゴミ箱の中身を確認します。
$ trash-list
2022-03-02 12:44:40 /home/taro/sample.txt
2022-03-02 12:44:40 /home/taro/sampledir
ゴミ箱の中のファイルを復元します。
$ trash-restore
0 2022-03-02 12:44:40 /home/taro/sample.txt
1 2022-03-02 12:44:40 /home/taro/sampledir
What file to restore [0..1]:
ゴミ箱のファイルを削除します。
$ trash-rm /home/taro/sample.txt
$ trash-list
2022-03-02 12:44:40 /home/taro/sampledir
ゴミ箱を空にします。
$ trash-empty
しかし定期的にゴミ箱を空にしないとディスク容量を圧迫してしまいます。コマンド操作が分かったところで、ゴミ箱移動後、1ヶ月経過したファイルを自動で削除するスクリプトを作ってみたいと思います。
cron に設定しておけば、30日経過したゴミ箱のファイルは自動で削除されていきます。
trash.sh
#/bin/bash
# 保存日数を設定
KEEP_DAY=30
# 削除対象の日付を取得 例 2022-04-01 12:00:00
RM_DAY=`date +'%Y-%m-%d %H:%M:%S' --date "${KEEP_DAY} days ago"`
# デリミタを改行に設定
IFS=$'\n'
# ゴミ箱のリストを所得
for line in `trash-list`
do
# 2022-03-01 12:00:00 /home/taro/ピクチャ/Screenshot from 2022-03-02 06-52-51.png
# :
# trash-listの行よりタイムスタンプだけを取得
TIMESTAMP=`echo "${line}"| awk '{print $1" "$2}'`
# 削除対象の日付とタイムスタンプを比較する。
if [[ "${RM_DAY}" > "${TIMESTAMP}" ]]; then
# trash-listの行よりタイムスタンプの文字列を削除して削除対象のファイル名を取得する。
FILENAME=`echo "${line}"|sed "s/^${TIMESTAMP} //"`
# ゴミ箱のファイルを削除する。
trash-rm "${FILENAME}"
fi
done