bash:删除文件名中除最后一个版本以外的所有文件

时间:2015-10-06 22:00:56

标签: python bash sh

我有10K +文件,如下所示。文件系统日期(导出时间)是所有文件的日期。

YYY101R1.corp.company.org-RUNNINGCONFIG-2015-07-10-23-10-15.config
YYY101R1.corp.company.org-RUNNINGCONFIG-2015-07-11-22-11-10.config
YYY101R1.corp.company.org-RUNNINGCONFIG-2015-10-01-10-05-08.config

LLL101S1.corp.company.org-RUNNINGCONFIG-2015-08-10-23-10-15.config
LLL101S1.corp.company.org-RUNNINGCONFIG-2015-09-11-20-11-10.config
LLL101S1.corp.company.org-RUNNINGCONFIG-2015-10-02-19-05-07.config

如何从文件名中删除文件的上一版本(上次日期)以外的所有文件并将其重命名为

YYY101R1.corp.company.org.config  
LLL101S1.corp.company.org.config

谢谢。

3 个答案:

答案 0 :(得分:0)

UNIX shell命令

ls -t YYY101R1.corp.company.org*

将按年龄顺序列出文件,最新的。抓住第一行作为“最新”并创建一个符号(“软”)链接:

ln -s $latest YYY101R1.corp.company.org.config

对每个文件组重复。

这会让你前进吗?如果没有,请发布您的代码和具体问题的解释。见https://stackoverflow.com/help/mcve

答案 1 :(得分:0)

我得到类似的东西,首先获取按修改时间升序排序的所有文件的列表,然后获取它们的数量,显示所有减去它们的最后2个并将其传递给list以命令删除文件。

ls -tr | wc -l

ls -tr | head -number_of_files_minus_2 | xargs rm

有用吗?

答案 2 :(得分:0)

FLast=`ls -tr 'YYY101R1.corp.company.org*' | tail -n 1`

mv ${FLast} YYY101R1.corp.company.org.config
rm -f YYY101R1.corp.company.org-RUNNINGCONFIG-*