Bourne Shell 删除扩展名为 DOY 的最旧文件
Bourne Shell delete oldest file with DOY extension
我对 bourne 脚本编写(运行ning 在 Solaris 上比较陌生),出于某种原因我正在努力解决这个简单的问题。我正在创建一个脚本,它将 运行 在目录中,并将尝试删除早于特定日期的文件。
文件格式为:log.DOY,例如 log.364、log.365、log.001 等
现在,如果不是因为令人讨厌的翻转,这将很容易,尤其是它并不总是最大值为 365(闰年)。
我曾考虑过使用 find -mtime,但如果可能的话最好使用文件扩展名。
各位脚本高手有什么建议吗?
我手边没有 Solaris 可供检查,但我认为这在 shell 脚本中并不实用,除非您碰巧有可用的非标准 CLI 工具(例如 GNU Coreutils)。
具体来说,弄清楚年终总结取决于知道现在是一年中的哪一天,我在 documentation 中找不到这样做的方法我可以找到. (可以在 GNU date
中使用 +%j
作为格式来完成。)
但是,文档确实说您应该 perl
,所以我希望使用它。
您对 find
和 -mtime
的选择很接近,但还有一种可能更简单的方法。您说您想删除早于某些 测量文件 日期的文件(假设所有早于 log.287
的文件——包括 log.287
)。
find
提供了可以做到这一点的 -newer
选项。以下是一个简短的脚本,它将测量文件名作为其第一个参数,并将在此处打印(但您可以自己删除)该目录中的所有文件(使用 -maxdepth 1
选项非递归)。 printf
操作用于测试以确保没有 "OOPs" 事故。如果您有任何问题,请告诉我:
#!/bin/sh
find . -maxdepth 1 -type f ! -newer "" |
while read filenm; do
printf "%s\n" "$filenm" ## you can add rm to remove the file
done
注意:检查您的 read
版本。 POSIX 兼容用法如上所示,但如果您有 -r
选项,我建议您也使用它。
我对 bourne 脚本编写(运行ning 在 Solaris 上比较陌生),出于某种原因我正在努力解决这个简单的问题。我正在创建一个脚本,它将 运行 在目录中,并将尝试删除早于特定日期的文件。
文件格式为:log.DOY,例如 log.364、log.365、log.001 等
现在,如果不是因为令人讨厌的翻转,这将很容易,尤其是它并不总是最大值为 365(闰年)。
我曾考虑过使用 find -mtime,但如果可能的话最好使用文件扩展名。
各位脚本高手有什么建议吗?
我手边没有 Solaris 可供检查,但我认为这在 shell 脚本中并不实用,除非您碰巧有可用的非标准 CLI 工具(例如 GNU Coreutils)。
具体来说,弄清楚年终总结取决于知道现在是一年中的哪一天,我在 documentation 中找不到这样做的方法我可以找到. (可以在 GNU date
中使用 +%j
作为格式来完成。)
但是,文档确实说您应该 perl
,所以我希望使用它。
您对 find
和 -mtime
的选择很接近,但还有一种可能更简单的方法。您说您想删除早于某些 测量文件 日期的文件(假设所有早于 log.287
的文件——包括 log.287
)。
find
提供了可以做到这一点的 -newer
选项。以下是一个简短的脚本,它将测量文件名作为其第一个参数,并将在此处打印(但您可以自己删除)该目录中的所有文件(使用 -maxdepth 1
选项非递归)。 printf
操作用于测试以确保没有 "OOPs" 事故。如果您有任何问题,请告诉我:
#!/bin/sh
find . -maxdepth 1 -type f ! -newer "" |
while read filenm; do
printf "%s\n" "$filenm" ## you can add rm to remove the file
done
注意:检查您的 read
版本。 POSIX 兼容用法如上所示,但如果您有 -r
选项,我建议您也使用它。