Date Bourne Shell删除扩展名为DOY的最旧文件

Date Bourne Shell删除扩展名为DOY的最旧文件,date,scripting,sh,Date,Scripting,Sh,我对bourne脚本编写(在Solaris上运行)比较陌生,出于某种原因,我一直在努力解决这个简单的问题。我正在创建一个脚本,该脚本将在目录中运行,并将尝试删除早于某个日期的文件 文件的格式为:log.DOY,例如log.364、log.365、log.001等 现在,如果没有令人讨厌的滚动,这将是很容易的,特别是它不总是365作为一个最大值(闰年) 我已经讨论过使用find-mtime,但是如果可能的话,最好使用文件扩展名 你们这些脚本魔术师有什么建议吗?我手头没有Solaris可供检查,但我

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

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

现在,如果没有令人讨厌的滚动,这将是很容易的,特别是它不总是365作为一个最大值(闰年)

我已经讨论过使用find-mtime,但是如果可能的话,最好使用文件扩展名


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

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

具体来说,计算年终总结取决于知道现在是一年中的哪一天,而我在我能找到的时间里找不到这样做的方法。(可以在GNU
date
中使用
+%j
作为格式完成。)


但是,文档确实说您应该使用
perl
,所以我希望使用它。

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

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

#!/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

注意:检查您的
版本,阅读
。上面显示了与POSIX兼容的使用,但是如果您有
-r
选项,我建议您也使用它。

find-mtime
以及诸如YYYY-MM-DD.log之类的日期戳是最自我记录的解决方案IHMO:-)YRMV。祝你好运。假设你有一整套文件
log.001
log.366
:如果不检查修改日期,你怎么知道哪一个是最新的呢?在花了太多时间解决这个问题后,我最终选择了-mtime路径。这主要是因为我的任务是编写一个可以灵活保存日志天数的函数。我使用的find命令的完整行是:
find${LOG}-maxdepth 1-类型f-mtime+${DAYS}-exec rm{}\