![脚本用于删除超过 2 天的文件并将文件名记录到包含创建时间和删除时间的文件中](https://linux22.com/image/931049/%E8%84%9A%E6%9C%AC%E7%94%A8%E4%BA%8E%E5%88%A0%E9%99%A4%E8%B6%85%E8%BF%87%202%20%E5%A4%A9%E7%9A%84%E6%96%87%E4%BB%B6%E5%B9%B6%E5%B0%86%E6%96%87%E4%BB%B6%E5%90%8D%E8%AE%B0%E5%BD%95%E5%88%B0%E5%8C%85%E5%90%AB%E5%88%9B%E5%BB%BA%E6%97%B6%E9%97%B4%E5%92%8C%E5%88%A0%E9%99%A4%E6%97%B6%E9%97%B4%E7%9A%84%E6%96%87%E4%BB%B6%E4%B8%AD.png)
我正在尝试删除超过 2 天的文件,并将删除的文件名连同创建/修改时间和删除时间一起写入日志文件。
例如:文件名创建时间删除时间
测试1 11-08-2020T08:38:16+05:30 12-08-2020T10:18:42+05:30
测试2 11-08-2020T08:38:16+05:30 12-08-2020T10:18:42+05:30
我有脚本可以删除超过 2 天的文件并将文件名记录到文件中,但不知道如何打印以及创建/修改日期和删除时间。
#!/bin/bash
path="/test"
filename=*.txt
logfile=/tmp/$(date +%d-%m-%Y).log
days=-60
find $path -mmin $days -name "*.wav" -type f -print0 -delete | xargs -0 basename -a >> $logfile
有人能帮助我实现上述输出吗?
答案1
一旦删除了文件,就无法再获取stat
其atime
信息mtime
。
同样,-printf
GNU 中的操作find
有一个%f
用于打印文件基本名称的说明符,因此实际上不需要外部xargs
/basename
组合。
-printf
因此,您可以获取基本名称和修改时间
find "$path" -type f -name "*.wav" -mmin "$days" -printf '%f\t%T+\n'
然后您可以date
在之前(或之后)执行命令-delete
来获取删除时间:
find "$path" -type f -name "*.wav" -mmin "$days" -printf '%f\t%T+\t' -exec date '+%F+%H:%M:%S.%N' \; # -delete
(#
仅当您对其执行所需的操作感到满意时,才可删除以继续删除)。
对于其他日期/时间格式选项,请参见相关的手册页 - 我选择了%T+
GNU 长格式修改时间find
,然后选择了日期格式+%F+%H:%M:%S.%N
来模仿它。