【发布时间】:2013-05-27 22:17:22
【问题描述】:
这是我的问题,
我有一个文件夹,其中存储了多个具有特定格式的文件:
Name_of_file.TypeMM-DD-YYYY-HH:MM
其中 MM-DD-YYYY-HH:MM 是其创建时间。可能有多个文件同名但时间不同。
我想要的是一个可以保留每个文件的 3 个最新版本的脚本。
所以,我在那里找到了一个例子: Deleting oldest files with shell
但我不想删除一些文件,而是保留一定数量的较新文件。有没有办法获取该 find 命令,解析 Name_of_file 并保持 3 最新???
这是我已经尝试过的代码,但这并不是我所需要的。
find /the/folder -type f -name 'Name_of_file.Type*' -mtime +3 -delete
感谢您的帮助!
所以我决定添加我的最终解决方案,以防有人喜欢它。这是给出的 2 个解决方案的组合。
ls -r | grep -P "(.+)\d{4}-\d{2}-\d{2}-\d{2}:\d{2}" | awk 'NR > 3' | xargs rm
一条线,超级高效。如果日期或名称的模式发生任何变化,只需更改 grep -P 模式以匹配它。这样您就可以确定只有符合此模式的文件才会被删除。
【问题讨论】:
-
文件格式是固定的还是可以更改的?排序
YYYY-MM-DD-HH:MM比MM-DD-YYYY-HH:MM容易得多。 -
是的,我可以改变它。这实际上很容易
-
你打算用文件名来确定最新的3个文件吗?
-
我认为这就是问题所在。您想改用实际的 mtime 吗?
-
我不在乎,只要我能达到我的目标:D