2015-10-06 52 views
0

我有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

讓我們開始使用代碼來生成文件列表... –

回答

0

的UNIX shell命令

ls -t YYY101R1.corp.company.org* 

會,首先是最新列出的年齡順序文件。抓住第一行爲「最新」,並製作一個符號(「軟」)鏈接:

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

對每個文件組重複。

這會讓你走嗎?如果沒有,請發佈您的代碼和具體問題的解釋。看到https://stackoverflow.com/help/mcve

+0

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

+0

這使得它更容易:您的命名按順序對文件進行排序。使用'ls -r'首先放置最新的文件 - 按名稱,而不是時間戳。 – Prune

0

我得到了類似的東西,首先得到按修改時間升序排列的所有文件列表,然後獲取它們的數量,顯示所有文件減去最後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

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-* 
相關問題