ディレクトリのバックアップと削除のためのシンプルなbashスクリプト

ディレクトリのバックアップと削除のためのシンプルなbashスクリプト

試してみましたが、驚くべきことではありません。

#!/bin/bash

cd /home/test/backup

cp -a vaults backup/vaults-$(date +%d-%m-%y-%S)

find backup/vaults-* -mtime +5 -exec rm -r {} \;

ディレクトリをバックアップしてから5日以上前のすべてのディレクトリを削除するには、このファイルが必要です。すべてを削除し、次のように出力します。

find: `backup/vaults-27-02-17-41': No such file or directory

ベストアンサー1

私は通常そのようなバックアップにtarを使用します。あなたの状況の例は次のとおりです。

tar -czf /backup/vault-$(date -I).tar.gz vaults/*
find backup/ -type f -iname "*.tar.gz" -mtime +5 -delete

ここでコマンドを使用すると、tarタイムスタンプを含む圧縮バックアップアーカイブを取得できます。次に、findバックアップディレクトリでtar.gzで終わるファイルのみを見つけ、そのファイルが5日より古い場合は削除します。

しかし、tarを使用できず、cpを使用したい場合はfindを使用してください。そうすればほぼ一致しましたが、結果は次のようになります。

find backup/ -mindepth 1 -maxdepth 1 -type d -iname "vaults-*" -mtime +5 -exec rm -rf {} \;

値が1で、findがバックアップディレクトリのみを一覧表示するminlengthおよびmaxlengthスイッチに注意してください。それらが存在しない場合、findはコマンドを実行した後にそのディレクトリに入ろうとし、rmユーザーと同じエラーが発生したり、親ディレクトリも削除しようとする可能性があります。また、rm空でないディレクトリも削除し、削除中に何も要求されないように、コマンドを "-rf"オプションで実行する必要があります。

また、使用を検討する必要がありますスナップ写真このバックアップのため。これにより、ストレージ容量を節約し、ユーザーが直接設定できる保存ポリシーに従って削除を処理できます。

おすすめ記事