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