findコマンドをエコーする方法

findコマンドをエコーする方法

ラズベリーバックアップ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

findfprintfindコマンドの結果をファイルに書き込む操作があります。その後、コマンドを次のように拡張できます。

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

関連情報