对于覆盆子备份 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
选项作为替代。这会将结果作为空分隔字符串写入指定文件。
要计算结果文件中的项目,您可以查看此问题下讨论的选项:计算文件中空分隔项的数量。
答案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
并且就在 之前-delete
,以便它们仅在-delete
需要时才会被触发。
第一个新语句打印文件的文件路径./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