重要なお知らせ

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

【GOLF me!】初月無料お試し

/etc/crontabで以下のbackup.shを毎晩実行するのですが、
3日以前のものは毎回消していく場合は以下のような、
少し初心者的な書き方しか現在分からないのですが、
他にもし良い書き方があれば、教えていただけますでしょうか?
よろしくお願いします。

#!/bin/sh

DATE_1=`date -d '1 day ago' +%Y%m%d`
DATE_2=`date -d '2 days ago' +%Y%m%d`
DATE_3=`date -d '3 days ago' +%Y%m%d`

if [ test_$DATE_2.tar.gz ]; then
mv -f test_$DATE_2.tar.gz test_$DATE_3.tar.gz
fi

rm -f test_$DATE_3.tar.gz

if [ test_$DATE_1.tar.gz ]; then
mv -f test_$DATE_1.tar.gz test_$DATE_2.tar.gz
fi

if [ test.tar.gz ]; then
mv -f test.tar.gz test_$DATE_1.tar.gz
fi

tar zcvf test.tar.gz /usr/local/test

A 回答 (1件)

えーとまず、


if [ test_$DATE_2.tar.gz ];
等は常に真です。おそらくは、その名前のファイルが存在するかどうか調べたいと思うので、その場合は、
if [ -f test_$DATE_2.tar.gz ];
です。

それにしても意味不明のスクリプトです。本当にこれでやりたいことになっていますか?日本語に直して読んでみてください。

普通のやり方は2通りあって、

案1:ファイルに連番をつけて3世代残す
(1)ファイル3があれば消す
(2)ファイル2があればファイル3にリネーム
(3)ファイル1があればファイル2にリネーム
(4)ファイルがあればファイル1にリネーム
(5)ファイルを作成

test -f test_3.tar.gz && rm test_3.tar.gz
test -f test_2.tar.gz && mv test_2.tar.gz test_3.tar.gz
test -f test_1.tar.gz && mv test_1.tar.gz test_2.tar.gz
test -f test.tar.gz && mv test.tar.gz test_1.tar.gz
tar zcvf test.tar.gz /usrl/local/test

案2:タイムスタンプが古いものを消す
(1)タイムスタンプが4日以上のものを消す
(2)日付入りのファイルを作る

find -name 'test_*.tar.gz' -mtime +3 | xargs -r rm
tar zcvf test_`date +%Y%m%d`.tar.gz /usr/local/test
    • good
    • 0

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