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

问题描述:

我有10K以上的文件,如下所示。文件系统日期(导出时间)是所有文件的一个日期。bash:删除文件名中除最后一个版本以外的所有文件

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 

谢谢。

+0

让我们开始使用代码来生成文件列表... –

的UNIX shell命令

ls -t YYY101R1.corp.company.org* 

会,首先是最新列出的年龄顺序文件。抓住第一行为“最新”,并制作一个符号(“软”)链接:

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

对每个文件组重复。

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

+0

我只在文件名中有正确的时间,所以按时间戳排序不起作用。 – uatousa

+0

这使得它更容易:您的命名按顺序对文件进行排序。使用'ls -r'首先放置最新的文件 - 按名称,而不是时间戳。 – Prune

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

ls -tr | wc -l

ls -tr | head -number_of_files_minus_2 | xargs rm

是它有用吗?

+0

我只在文件名中有正确的文件日期和时间。所有文件的系统文件时间都是相同的(导出日期和时间)。 – uatousa

+0

所以也许对于第一个命令,只是按字母排序'ls | sort -t- -k3'这将按文件名的日期对文件进行排序。 – grimsock

+0

是否有办法获取头文件组的数量 - ? – uatousa

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

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