/foo
ファイルをtarして、ホストAから特定の宛先のリモートホストBにコピー(scp?)し、YYYY-MM -DDなど、私たちが使用する特定の時間形式に名前を変更できるシェルスクリプトを作成しようとしています。
この機能を追加するために、特定の日にホストAからホストBへのパスにファイルがコピーされたとします。foo.txt
これはもちろんスクリプトによって行われます。このスクリプトが同じ日に2回実行される場合、スクリプトはリモートホストBの既存のファイルを上書きするのではなく、ホストBにすでに存在するバージョンを認識し、上書きするのではなくファイルにタイムスタンプを追加する必要があります。 it "1"にコピーすると仮定して別のファイルにコピーされます。
たとえば、foo.txt
ファイルがリモートホストBにすでに存在する場合、ホストAで実行されているスクリプトはファイル名を変更してリモートfoo.txt.1
ホストBの同じパスにコピーする必要があります。
ファイルだけなので、rsyncを介してSCPを使用できます。
ベストアンサー1
あなたの要求をよく理解したら、rsyncオプション(--backup
または-b
)1つだけが必要です。
rsync のマニュアルページを見てください。
-雨、- サポート
このオプションを使用すると、各ファイルが転送または削除されると、既存のターゲットファイルの名前が変更されます。以下を使用して、バックアップファイルの場所と追加されるサフィックス(存在する場合)を制御できます。--バックアップディレクトリそして - サフィックスオプション。
foo.txt
したがって、ファイルをフォルダに/foo
、Host1
からに転送する場合は、コマンドHost2
は次のようになります。
rsync -b --suffix=".$(date +%Y-%m-%d)" -e "ssh -p $SSH_SERVER_PORT" foo.txt remoteuser@Host2:/foo/foo.txt
ファイルfoo.txt
をにコピーするたびに、Host2
新しいファイルがfoo.txt.YYYY-MM-DD
作成されます。ファイルのすべてのバックアップバージョンを同じ場所に維持するには、
このオプションを使用することをお勧めします。--backup-dir
- 注:選択したサフィックスのため、ファイルごとに1日に1つのバックアップコピーのみが作成されます。 「すべての」バックアップコピーをアーカイブするには、他のサフィックスオプションを使用することをお勧めします(日付も
+%Y-%m-%d_%H%M%s
考慮可能)