我对bourne脚本(在Solaris上运行)相对较新,我出于某种原因正在努力解决这个简单的问题。我正在创建一个将在目录中运行的脚本,并将尝试删除早于某个日期的文件。
文件的格式为:log.DOY,例如log.364,log.365,log.001等。
如果对于讨厌的翻转来说这很容易,特别是它并不总是365最大(闰年)。
我已经使用find -mtime进行了辩论,但如果可能的话,最好使用文件扩展名。
你们这些脚本魔术师有什么建议吗?
答案 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
,所以我会考虑使用它。