【发布时间】:2014-02-15 06:03:00
【问题描述】:
我有一个路径,我将在其中创建许多格式为“test_1.2.3_yyyymmdd”的目录
例如test_1.2.3_20140214
一个常见的事情是,我将始终将日期(以 yyyymmdd 格式)作为目录名称的一部分。理想情况下的文件 以不同的日期以相同的方式创建。
我的要求是根据目录名称中的日期字段对文件进行排序,我可以使用以下命令来实现
ls | sort -t_ -k3,3
但是,有时创建目录时,日期不是目录名称的最后一个字段。即使在这种情况下,我也想要 根据日期字符串对文件进行排序。有人可以告诉我如何实现这一目标。
如果我能够实现这种排序,那么我必须删除最旧的文件(基于 yyyymmdd 模式)。要求是路径应始终包含最新的 10 基于上述排序的目录,如果超过 10 个,则我必须删除最旧的目录。
我不能指望 find 命令,因为这不是基于 -mtime
我想为此依靠 UNIX 工具/Perl 编程。
【问题讨论】:
-
每个文件名是否最多包含一个由八个连续数字组成的子字符串?
-
嗨 Rob,文件名中不会有任何其他部分有八个连续数字。八位数字(日期 yyyymmdd)只会出现一次
-
"... 我必须删除最旧的文件(基于 yyyymmdd 模式)。" 如果两个或多个文件具有相同的 yyyymmdd 会怎样?
-
不会这样,但是是的,如果是,我也必须删除它们。
-
如果您不确定目录名称是否包含正确的时间戳,为什么不对文件运行“stat”,找到正确的时间戳并采取适当的行动。为什么需要依赖不正确且可能陈旧的元数据。