0

私は毎日データベースのバックアップを作成しています。

ハードディスクを保存するために、シェルスクリプト2 weeksからAND(day of month) % 14 != 0より古いファイルを削除するにはどうすればよいですか?

そのため、毎月14日または28日に作成されたファイルを削除しないfind / -mtime +14 -exec rm {} \;ように追加した、のようなコマンドを探しています。

過去2週間は毎日バックアップし、その後は2週間に1回(ほぼ)バックアップしたいですか?

ループ内のPHPコードは次のようになります。

$mtime = filemtime($file); // Last modified date of file (created)
$day_mtime = date('j', $mtime); // Day of month (1-31)
$two_weeks_ago = time() - 60 * 60 * 24 * 14;

if ($mtime < $two_weeks_ago && $day_mtime % 14 != 0) {
    // Delete file older than 2 weeks 
    // AND not modified not 14'th nor 28'th day of month
}
4

1 に答える 1

1

これはbashに相当します。phpからbashに移行する際の注意点がいくつかあります。

  • bash$では「...の値」を意味します。mtime変数も$mtime変数の値です。
  • 表記$(...)は、括弧内でコマンドを実行し、その出力でキャプチャすることを意味します。したがって、$(stat -c %Y $file)の出力に置き換えられます。stat -c %Y $file
  • 代入演算子の周りにスペースを入れることはできa=bませa = bん。

    mtime=$(stat -c %Y $file)
    day_mtime=$(date -d@$mtime +%d)
    two_weeks_ago=$(date -d '2 weeks ago' +%s)
    mod_14_day=$(expr $day_mtime 14)
    if [ $mtime -lt $two_weeks_ago ] && [ $mod_14_day -eq 0 ] ; then
    fi
    
于 2012-11-16T12:23:17.843 に答える