重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

CentOSにて、特定ディレクトリの圧縮を行い、一定期間バックアップとして保持したいのですが、
うまいことシェルが組めずに困っています。


理想の動作としては、下記のような感じです。
----------------------------------
・1時間に1回、特定ディレクトリを圧縮
・圧縮後のファイルは48時間分サーバに保存
・48時間を超えたものは自動で削除
----------------------------------


現在はシェルとcronを使用し、下記を毎時10分に実行しております。
バックアップの役割は果たしているのですが、手動で削除が必要な状況です。
----------------------------------
date=`/bin/date +%y%m%d%H`
tar cfz $date.tar.gz /home/****/
----------------------------------

識者のみなさま、ご教示くださいませ。

A 回答 (3件)

findを使えば日にち単位で削除できます。



find . -name \*.log -ctime +60 -type f -exec rm -fr {} \;
と書けば、カレントディレクトリで「.log」という名前のファイルで60日以上古いものを削除します。

他の方法として、毎時取得の48時間保存なので、lsの結果をソートして最後のものをrmするとか。

(例を書いてみますが、動作確認はまったくしていません)
KEEP=48
FILE=`"ls ." | wc -l`
while [ $FILE -ge $KEEP ]; do
RMFILE=`"ls ." | sort -r | tail -1`
rm $RMFILE
FILE=`"ls ." | wc -l`
done
    • good
    • 0
この回答へのお礼

例文まで作成していただき恐縮です。
findにてOKでした。
例文を参考にさせていただき、下記を作成しました。
find . -maxdepth 1 -type f -name \*.gz -mtime +1 | xargs rm -f

お礼日時:2007/12/21 12:39

GNU find なら分の単位でわかるみたい>#2.

この回答への補足

補足ありがとうございます。
質問に書いておけばよかったのですが、48時間という値は
大体で大丈夫なので、日にち単位としました。

補足日時:2007/12/21 12:40
    • good
    • 0

find かな.

この回答への補足

仰るとおり、findを忘れておりました。。

補足日時:2007/12/21 12:45
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!