自動フォルダを含むscpバックアップコマンドが2回実行されると、古いファイルは上書きされません。

自動フォルダを含むscpバックアップコマンドが2回実行されると、古いファイルは上書きされません。

私のウェブサイトからバックアップを受けたいです。正しいデータを含むディレクトリを自動的に生成するには、次のコマンドを使用しています。

scp -rp [email protected]:webdir/ /mnt/Webseite/Backups/"$(date +"%Y-%m-%d")"

これは非常にうまく機能します。ただし、同じ日に同じコマンドを2回目に実行すると、「webdir」ディレクトリが日付フォルダにコピーされます。

最初の実行:

/mnt/Website/Backups/2020-05-22/"files"

2回目の実行:

/mnt/Website/Backups/2020-05-22/"files"
/mnt/Website/Backups/2020-05-22/webdir/"files"

しかし、同じ日の「古い」バックアップを上書きしたいと思います。これにより、1 日に 1 回だけバックアップできます。

私がここで何を間違っているのか?この問題は簡単に解決できるようです。 Google ではお手伝いできません。

答え1

いくつかのテストをしてみると、以前の答えが間違っていることがわかりました。後でディレクトリがターゲットに存在しないのが実際に最善であることがわかりました。 2番目にコマンドを実行すると、そのフォルダはDATEフォルダにあると予想されます。最初のコピーでは、ソースディレクトリの名前が変更されたのと同じです(ターゲットが存在しないため)。 2番目に存在する場合、scpはそのディレクトリを既存のディレクトリに複製しようとしていることに気付きます。

問題に対する解決策は、まず削除することです。

rm -rf /mnt/Webseite/Backups/"$(date +"%Y-%m-%d")" #or move it if you want to keep the files
scp -rp [email protected]:webdir /mnt/Webseite/Backups/"$(date +"%Y-%m-%d")"

答え2

ソースの最上位ディレクトリが選択されないように、ターゲットディレクトリを作成する必要があります。副作用は、webdirディレクトリ自体がバックアップツリーに含まれることです。これが問題の中心である場合は、次のものをrsync使用することを検討してください。

dst="/mnt/Webseite/Backups/$(date +"%Y-%m-%d")"
mkdir -p "$dst"
scp -rp [email protected]:webdir/ "$dst"

この例ではこれを確認できます。

# Set up the scenario on the remote source
mkdir -p /tmp/src/webdir
touch /tmp/src/webdir/{a,b,c}

# Copy the first time, and review the results
dst="/tmp/dst/webseite/backups/$(date +"%Y-%m-%d")"
mkdir -p "$dst"
scp -rp remotehost:/tmp/src/webdir/ "$dst"

find "$dst" | sort

/tmp/dst/webseite/backups/2020-05-23
/tmp/dst/webseite/backups/2020-05-23/webdir
/tmp/dst/webseite/backups/2020-05-23/webdir/a
/tmp/dst/webseite/backups/2020-05-23/webdir/b
/tmp/dst/webseite/backups/2020-05-23/webdir/c

# Change some files
touch /tmp/src/webdir/{d,e}

# Copy the second time, and review the results
scp -rp remotehost:/tmp/src/webdir/ "$dst"

find "$dst" | sort

/tmp/dst/webseite/backups/2020-05-23
/tmp/dst/webseite/backups/2020-05-23/webdir
/tmp/dst/webseite/backups/2020-05-23/webdir/a
/tmp/dst/webseite/backups/2020-05-23/webdir/b
/tmp/dst/webseite/backups/2020-05-23/webdir/c
/tmp/dst/webseite/backups/2020-05-23/webdir/d
/tmp/dst/webseite/backups/2020-05-23/webdir/e

website最後に、バックアップ(ターゲット)ディレクトリツリーに含まれないようにするには、rsync代わりに次を使用します。

rsync -a remotehost:/tmp/src/webdir/ "$dst"

関連情報