ログファイルなどでファイルが増え続ける場合、
最新ファイルは残し、古いファイルは随時削除したい場合があります。
以下のスクリプトは、指定されたディレクトリにあるファイルの中から、
引数に指定された新しいファイルの数分を残し、他のファイルを削除するスクリプトです。
■スクリプト本体
こちらよりダウンロードできます。
ファイル名:
delete_old.sh
使い方:
第一引数に、残す最新ファイルの数を指定し、
第二引数に、削除対象のファイルが含まれるディレクトリを指定してください。
例:
./delete_old.sh 3 /test/log
この場合、/test/logに含まれるファイルのうち、最新の3ファイルを残し、他を削除します。
ただし、ディレクトリは削除されません(エラーが出て削除さない)。
※注意※
誤ってファイルを削除しないよう、ダウンロードしたままでは、ファイルは削除されません。
削除対象のファイルは、「delete ~」のようなログで表示されます。
動作に問題が無いことを確認したうえで、11行目のコメント(#)を削除して、削除処理を有効にしてください。
■スクリプト処理解説
do
#rm $FILE
FILE変数のファイルを、削除する(削除処理を有効にする場合、#を削除してください)。
なお、rmに-rオプションを追加することで、ディレクトリも削除することができます。
ここでは、ディレクトリを誤って削除しないよう、あえてオプションを付けていません。
echo "delete $FILE"
「delete FILE変数の内容」というログをコンソールに出力する。
■補足こういった処理は、自動で定期的に実行されるべきです。
削除処理をスクリプトで自動化したとはいえ、スクリプトを実行するのが手動では、手間がかかることに変わりはありません。
cronを設定することで、定期的に勝手に実行されることができるようになります。
是非cronの設定をして自動化をしましょう。
cronの設定方法は別の記事で解説したいと思います(記事にでき次第、ここにリンクを載せます)。
最新ファイルは残し、古いファイルは随時削除したい場合があります。
以下のスクリプトは、指定されたディレクトリにあるファイルの中から、
引数に指定された新しいファイルの数分を残し、他のファイルを削除するスクリプトです。
■スクリプト本体
こちらよりダウンロードできます。
ファイル名:
delete_old.sh
使い方:
第一引数に、残す最新ファイルの数を指定し、
第二引数に、削除対象のファイルが含まれるディレクトリを指定してください。
例:
./delete_old.sh 3 /test/log
この場合、/test/logに含まれるファイルのうち、最新の3ファイルを残し、他を削除します。
ただし、ディレクトリは削除されません(エラーが出て削除さない)。
※注意※
誤ってファイルを削除しないよう、ダウンロードしたままでは、ファイルは削除されません。
削除対象のファイルは、「delete ~」のようなログで表示されます。
動作に問題が無いことを確認したうえで、11行目のコメント(#)を削除して、削除処理を有効にしてください。
■スクリプト処理解説
#!/bin/bash
所謂おまじない。どのシェルを使って処理をするかの指定をする。
所謂おまじない。どのシェルを使って処理をするかの指定をする。
FILE_LIST=`ls -t $2`
第二引数に指定されたディレクトリに含まれるファイルを、更新日時が新しい順で、変数FILE_LISTに代入する。
第二引数に指定されたディレクトリに含まれるファイルを、更新日時が新しい順で、変数FILE_LISTに代入する。
count=0
count変数に0を代入(変数初期化)。
count変数に0を代入(変数初期化)。
for FILE in $FILE_LIST
FILE_LISTに含まれるファイル名を、順にFILE変数に代入する繰り返し。FILE変数に入れるファイルが無くなった時、この繰り返し処理を抜ける。
FILE_LISTに含まれるファイル名を、順にFILE変数に代入する繰り返し。FILE変数に入れるファイルが無くなった時、この繰り返し処理を抜ける。
do
((count++))
count変数に1を加算(インクリメント)。
count変数に1を加算(インクリメント)。
echo "check $FILE"
「check FILE変数の内容」というログをコンソールに出力する。
「check FILE変数の内容」というログをコンソールに出力する。
if [ $count -gt $1 ]; then
if条件分岐。count変数が、第一引数に指定された数よりも大きい時、次のfiまでの間の処理を実行する
if条件分岐。count変数が、第一引数に指定された数よりも大きい時、次のfiまでの間の処理を実行する
#rm $FILE
FILE変数のファイルを、削除する(削除処理を有効にする場合、#を削除してください)。
なお、rmに-rオプションを追加することで、ディレクトリも削除することができます。
ここでは、ディレクトリを誤って削除しないよう、あえてオプションを付けていません。
echo "delete $FILE"
「delete FILE変数の内容」というログをコンソールに出力する。
fi
if条件分岐の終了。
if条件分岐の終了。
done
繰り返し処理の先頭に戻る。もう一度for~の処理を実行する。
繰り返し処理の先頭に戻る。もう一度for~の処理を実行する。
echo "finish"
「finish」という文字列を出力する。
「finish」という文字列を出力する。
■補足
削除処理をスクリプトで自動化したとはいえ、スクリプトを実行するのが手動では、手間がかかることに変わりはありません。
cronを設定することで、定期的に勝手に実行されることができるようになります。
是非cronの設定をして自動化をしましょう。
cronの設定方法は別の記事で解説したいと思います(記事にでき次第、ここにリンクを載せます)。
スポンサードリンク