古いディレクトリのファイルを削除するにはRsyncを使用しますか?

古いディレクトリのファイルを削除するにはRsyncを使用しますか?

私は本当にrsyncの問題に本当に閉じ込められており、文書を読んでもそれを理解することはできません。サーバー上のいくつかのフォルダとファイルをバックアップするために、毎日1つずつ7つのディレクトリを作成したいと思います。私が経験している問題は、rsyncが前日にバックアップされたディレクトリを削除しているようです。

たとえば...

/backup/Mondayには私が移動したファイルが含まれていますが、/backup/Tuesday/ディレクトリにはファイルとディレクトリの両方が含まれていません。

私はMondayディレクトリに月曜日に存在していたすべてのファイルを含め、Tuesdayディレクトリに火曜日に存在していたすべてのファイルを含めたいと思います。

これは私のスクリプトです。

ssh [email protected] 'find /backup/staging/ -mtime +7 -exec rm -rf {} \;'
crontab -l > $(date +%Y%m%d).crontab
mysqldump -password cherry --all-databases> $(date +%Y%m%d)_cherrydb.sql
rsync -a --log-file=$(date +%Y%m%d).log /var/www/admin /var/www/customers /var/www/UploadedFiles /etc/apache2/certs /etc/apache2/sites-enabled $(date +%Y%m%d).crontab $(date +%Y%m%d)_cherrydb.sql [email protected]:/backup/staging/$(date +%A)/
rsync -a $(date +%Y%m%d).log [email protected]:/backup/staging/$(date +%A)/
rm $(date +%Y%m%d).log
rm $(date +%Y%m%d).crontab
rm $(date +%Y%m%d)_cherrydb.sql

答え1

よくわかりませんが、スクリプトの最初の行に問題があるようです。私の考えでは、先週バックアップを削除したいと思いますが、これは危険な習慣です。 2つの選択肢は、最初の行を次に置き換えることです。

ssh [email protected] 'rm -rf /backup/staging/$(date +%A)/*'

または、スクリプトの最初の行を削除し、最初の行の--deleteフラグを使用して、ターゲットrsyncからバックアップセットの一部ではないすべてのファイルを削除します。

答え2

問題は、スクリプトの最初の行とコマンド自体の組み合わせですrsync。どこで見よう...

このfind /backup/staging/ -mtime +7 -exec rm -rf {} \;コマンドはすべてのファイルを削除しますそして完全なディレクトリツリーファイルまたはディレクトリツリーのルートが少なくとも7日間変更されていません。

rsync -a ...ファイルとディレクトリの変更時間にわたってコピーできるものを使用することもできます。

最終結果は、find少なくとも7日前に作成されたファイルとディレクトリツリーを照合して削除します。通常、これには/bin/lsほぼ確実に独自のシステムファイルが含まれます/ls -ld /表示された修正日が1週間以上経過したことを確認できます。

1つの解決策は、スケジュールされたrsnapshotバックアップと日付のバックアップを非常によく管理することを使用することです。もう一つの可能​​性は使用することですが、rsync -a ... --delete全体的に私はそれをお勧めしますrsnapshot

独自のソリューションを実際にリリースするには、次のコマンドのペアを検討してください。

find /backup/staging -mtime +7 \! -type d -delete
find /backup/staging -depth -type d -exec rmdir {} + 2>/dev/null

これにより、7日より前のディレクトリではなく、すべてのディレクトリ(ファイル、デバイスノードなど)が削除され、空のディレクトリもすべて削除されます。

関連情報