ラズベリーバックアップbashスクリプトの場合は、削除された古いバックアップと削除された古いバックアップの数を記録したいと思います。
私は使う
find $backup_path/$HOSTNAME.*.img -mtime +$retention_days -type f -delete
きれい。
削除されたファイルを計算、表示、記録する方法は?
答え1
-print
、オプションを使用find
して削除されたファイルを出力し、tee
結果をログファイルにパイプすることができます。最後に削除されたファイルの行数を計算してログファイルに追加します。
find $backup_path/$HOSTNAME.*.img -mtime +$retention_days -type f -delete -print | tee ${LOGFILE} | wc -l | xargs echo "Files deleted:" >> ${LOGFILE}
同じ結果に新しい結果を追加するには、${LOGFILE}
を使用する必要がありますtee -a
。
答え2
find
fprint
findコマンドの結果をファイルに書き込む操作があります。その後、コマンドを次のように拡張できます。
find $backup_path/$HOSTNAME.*.img -mtime +$retention_days -type f -fprint /path/to/log.txt -delete
その後、次のコマンドを使用してログファイルからファイル数を取得できますwc
。
cat /path/to/log.txt | wc -l
検索結果に特殊文字が表示される可能性がある場合は、このfprint0
オプションを代替として使用できます。結果は、指定されたファイルにNULLで区切られた文字列として記録されます。
結果ファイルのエントリ数を計算するには、次の質問で説明するオプションを確認してください。ファイル内の空白で区切られた項目数の計算。
答え3
ファイル名に改行文字がある場合(touch /the/path/$'foo\nbar'
例の作成)、GNU findの-fprintf
機能を使用してファイル名をログファイルに印刷し、各ファイル名のドットを別々のログファイルに印刷できるため、混乱を避けることができます。 。ドットファイルのバイト数は一致するファイル数と同じで、ファイル名自体は別々のファイルに保存されます。
find "$backup_path"/"$HOSTNAME".*.img -mtime +"$retention_days" -type f \
-fprintf ./deleted-files '%p\n' \
-fprintf ./count-files '.' \
-delete
-fprintf
上記では、前のフィルタ条件の-mtime
直後-type f
と直前にこれら2つのステートメントを具体的に配置し、必要なときにのみトリガーするように-delete
しました。-delete
最初の新しいステートメントはファイルのファイルパスを印刷し、2番目のステートメント./deleted-files
は./count-files
削除されたファイルログを見つけて削除されたファイル名を見つけ、削除されたファイルwc -c < count-files
の総数を報告するために使用できます。-fprintf
ファイル名は実行されるたびに上書きされます。
答え4
次のコマンドを使用すると、同じ効果を得ることができます
find $backup_path/$HOSTNAME.*.img -mtime +$retention_days -type f -exec rm -rvf {} \; >log_file ===> This will delete and writes to logfile which are the files getting deleted
wc -l log_file===> will display count of files which are deleted