Bourne Shell使用DOY扩展名删除最旧的文件

时间:2015-08-19 16:57:35

标签: date scripting sh

我对bourne脚本(在Solaris上运行)相对较新,我出于某种原因正在努力解决这个简单的问题。我正在创建一个将在目录中运行的脚本,并将尝试删除早于某个日期的文件。

文件的格式为:log.DOY,例如log.364,log.365,log.001等。

如果对于讨厌的翻转来说这很容易,特别是它并不总是365最大(闰年)。

我已经使用find -mtime进行了辩论,但如果可能的话,最好使用文件扩展名。

你们这些脚本魔术师有什么建议吗?

2 个答案:

答案 0 :(得分:2)

您选择的find-mtime很接近,但有一种可能更简单的方法。您说您要删除早于某些测量文件日期的文件(比如所有早于log.287的文件 - 包括log.287)。

find提供-newer选项即可。以下是一个简短的脚本,它将测量文件名作为其第一个参数,并在此处打印(但您可以自己包含删除)该目录中的所有文件(非递归地使用-maxdepth 1选项)。提供printf操作用于测试以确保没有“OOP”事故。如果您有疑问,请告诉我们:

#!/bin/sh

find . -maxdepth 1 -type f ! -newer "$1" | 
while read filenm; do
    printf "%s\n" "$filenm"  ## you can add rm to remove the file
done

注意:检查您的read版本。符合POSIX标准的用法如上所示,但如果您有-r选项,我也建议使用它。

答案 1 :(得分:0)

我没有Solaris方便检查,但我不认为这在shell脚本中是实用的,除非您碰巧有非标准的CLI工具(例如GNU Coreutils)。

具体来说,弄清楚年终包装取决于知道现在一年中的哪一天,而我在documentation找不到办法。 。 (可以使用date作为格式在GNU +%j中完成。)

但是,文档确实说你应该perl,所以我会考虑使用它。