テキストファイルが生成されるスクリプトを実行します。名前をfile-a.txtとして指定します。その後、同じスクリプトを再実行すると、同じfile-a.txtを上書きしますが、もちろん新しいコンテンツがある場合も同様です。それは問題ではありません。しかし、今では、スクリプトを実行するたびにその file-a.txt を保持し、再度実行すると、新しい "file-a.txt" が最新の新しいファイルになり "file-a.txt" になりたいと思います。 「これは以前の最新のファイルです。したがって、スクリプトを実行した後は常に最新のファイルが作成され、古いファイルだけを保持するだけです。私が正しく説明したいと思います。
- 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.txt
。original-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>
-f
daily
必須を意味し、構成ファイルの設定を無視します。一日が一番短い時間なので省略してもいいかわかりませんね。-f
最後の日に回転した場合は、均等に回転したことを確認してください。私の考えでは、他のオプション(size
、、、notifempty
...)も無視されます-f
。
より古いコピーが必要な場合は、オプションの数を増やしてくださいrotate
。