【Linux】タイムスタンプが古いファイルを削除する

死んだ後の話

誰しも見られたくないファイルの一つや二つはあるものかと思います。アカパスや日記、個人情報など誰にも見せたくないけれど、保持していなければならないファイルはよくよく考えてみると結構あります。

それらは今は気にしなくてもいいのですが、自分が死んだり記憶を失ったりなどして長時間触れなくなった時にどうなるのでしょうか?誰かに見られてしまうのでしょうか?法律的にどういう扱いを受けることになるのかは分かりませんでしたが、データを消さない限り自分の知らないところでファイルが開かれる可能性はゼロではありません。

死んだ後のことなど正直どうでもよいのですが、気になってしまったので長時間アクセスの無いファイルをタイムスタンプから判定して自動で削除するスクリプトを作成してみたいと思います。

dateコマンド

dateコマンドに-rオプションを付与するとファイルの最終更新日時を取得することが出来ます。+%sでUNIX時刻形式で出力します。

$ date -r hoge.txt +%s
1640928865

現在のUNIX時刻を取得するには下記のコマンドを実行します。

$ date +%s
1640929167

UNIX時刻の単位は[秒]なのでこの現在時刻と、ファイルの最終更新日時との差分をもってして新しい・古いの判定を行っていきます。

シェルスクリプト作成

作業場所のディレクトリとダミーファイルを作成します。

$ mkdir hoge
$ touch hoge/hoge.txt

作業ディレクトリに移動して下記のスクリプトを作成します。

#!/bin/sh
CURRENT_TIME=`date +%s`
OLD_BOARDER_TIME=30

time_stamp=`date -r ~/hoge/hoge.txt +%s`

if [[ ${OLD_BOARDER_TIME} -lt $((${CURRENT_TIME} - ${time_stamp})) ]]; then
  rm ~/hoge/hoge.txt
else
  echo 'ファイルを削除しません'
fi

上記はhoge.txtが最終更新日時から30秒以上経過している場合に削除するシェルスクリプトです。

タイムスタンプを更新する処理

引数にファイル名を指定してtouchコマンドを実行すると、指定したファイルの最終更新日時を現在時刻に更新します。つまりファイルの中身を変更せずにタイムスタンプのみを更新可能です。

各アプリケーションなどでもファイル読み込み処理と同時に、touchコマンドを外部コマンドとして実行すればそのファイルにアクセスがあるかどうかを判定することが出来るかと思います。

終わりに

今回作成したシェルスクリプトをCRONなどで定期実行すれば自動でタイムスタンプを確認しながら古いファイルのみを削除することが出来ます。

定期実行は割愛しますが定期実行させておけば死後も気にすることはありません。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA