如何回显查找命令

如何回显查找命令

对于覆盆子备份 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

相关内容