最新のファイルと古い最新のファイルを維持する方法は?

最新のファイルと古い最新のファイルを維持する方法は?

テキストファイルが生成されるスクリプトを実行します。名前をfile-a.txtとして指定します。その後、同じスクリプトを再実行すると、同じfile-a.txtを上書きしますが、もちろん新しいコンテンツがある場合も同様です。それは問題ではありません。しかし、今では、スクリプトを実行するたびにその file-a.txt を保持し、再度実行すると、新しい "file-a.txt" が最新の新しいファイルになり "file-a.txt" になりたいと思います。 「これは以前の最新のファイルです。したがって、スクリプトを実行した後は常に最新のファイルが作成され、古いファイルだけを保持するだけです。私が正しく説明したいと思います。

  1. File-a.(最初のファイルの生成)2.スクリプトを再実行します。今、ファイル-aは最新ですが、古いファイル-aの内容を保持したいと思います。

私は次のファイルのコピーを作成しました。

  • cp file-a file-a-oldを試しましたが、成功せずに別の方法を試しました。

答え1

スクリプトが古いファイルを上書きするためにmv -b使用できる一時ファイルを生成するようにします。mvバックアップが作成されますfile-a.txt~

-b, --backup[=CONTROL]各既存のターゲットファイルのバックアップ

script_generating_tmp_file && mv -b "file-a.txt.tmp" "file-a.txt"

あなたは得るでしょう:

$ ls -1
file-a.txt # <-- latest file
file-a.txt~ # <-- previous file

答え2

元のスクリプトを呼び出す新しいスクリプトを作成できます。元のスクリプトの名前がoriginal-script次のとおりであるとしますwrapper-script

#!/usr/bin/env bash

# Save a copy of latest file-a.txt before generating a new one;
# but don't bother trying if file-a.txt does not exist.
if test -f file-a.txt; then
    cp -a file-a.txt file-a-old.txt
fi

original-script # Run script that generates file-a.txt here.

ロジックは次のとおりです。

初めて通過するときはまだそこにはいけないのでfile-a.txt生成されfile-a-old.txtません。既存のスクリプトが生成されますが、file-a.txt何も生成されませんfile-a-old.txt

他の時間はすべてfile-a.txt存在するため、というコピーを作成しますfile-a-copy.txt。現在 2 つの同じファイルがあります:file-a.txtおよびfile-a-old.txtoriginal-script実行すると上書きされますが、file-a.txtそのままfile-a.old.txt残ります。

original-scriptユースケースに適している場合は、このロジックをそれ自体に追加することもできます。そうしないと、実行して目的のwrapper-script動作をoriginal-script取得できない可能性があります。

答え3

logrotateを使用して2つのファイルバックアップを作成できます。これにより、次の利点が得られます。

file
file.1
file.2

まず、次のように構成ファイルを作成します。

<path to your file> {
    rotate 2
    daily
    size 1
    notifempty
    missingok
}

だからあなたは走る

logrotate -f <path to config file>

-fdaily必須を意味し、構成ファイルの設定を無視します。一日が一番短い時間なので省略してもいいかわかりませんね。-f最後の日に回転した場合は、均等に回転したことを確認してください。私の考えでは、他のオプション(size、、、notifempty...)も無視されます-f

より古いコピーが必要な場合は、オプションの数を増やしてくださいrotate

関連情報