2017-04-05 99 views
1

我有一組名稱如4,_4_201703140220,_4_201703150220。其中第一個數字是目錄ID,尾部數字是ISO標準日期字符串。 Jenkins使用了這些,但這可能與此無關。如何在Linux中按日期獲取最新的目錄?

下面是一個示例清單:

_41_20170322145757/ 
_41_20170323110416/ 
_41_20170323110720/ 
_42_20170322095600/ 
_42_20170322103112/ 
_42_20170324120233/ 

每個目錄包含相同的數據的修改,但我想知道最新的每個ID。在上述情況下,這將是_41_20170323110720/_42_20170324120233/

是否有一個簡單的命令,我可以用它來獲取每個ID的最新目錄列表?或者一個python文件也可以工作。

+1

你忘了提及,所以在情況下,沒有明顯的人在這裏附加在末尾的數字是日期字符串,海報想對應的最近日期只有目錄。這是一個正確的總結嗎?另外,我們可以假設這是一個Unix終端嗎? –

+0

OOPS對不起..但你得到它..在它上面編輯 –

+0

否則,假設目錄的時間戳也寫日期順序,這將做你想要的https://unix.stackexchange.com/questions/136976/get -the-latest-directory-not-the-latest-file'ls -td - * | head -n 1'這會按時間戳排序目錄(不是文件名),然後獲取列表中的第一個。 – ti7

回答

0

我發現自己創建一個怪物,但假設你只想與在它以這樣的形式結束的最近日期的文件,這個Python表達式應該做你想要什麼:

python -c "import os; print max(((x, x.split('_')[-1]) for x in os.listdir('.')), key=lambda x: x[1])[0]" 

說明

os.listdirs('.')獲取當前路徑

(x for x in y)所有的目錄創建一個生成器表達式

.split('_')[-1]各執_每個目錄名,只需要最後一部分

max(<whatever>, key=value)找到基於一個特殊鍵
最大這就允許我們用一個函數來告訴我們,如果「紅」是不是「藍」變大

lambda x: x[1]創建inlinefunction(稱爲拉姆達)僅返回
對於含有[1, 'r', 3, 'z', 'b']列表,它將在位置1返回元件可迭代(我們可以通過尋找列表)的一部分,'r'

我們使用它來查找「最大」日期,該日期方便地是您的方案中最新的日期(201703150220大於201603150220)。

max()然後返回一個包含完整的文件名和日期的元組,我們試圖匹配
"_4_201703150220"成爲("_4_201703150220", "201703150220")

然後取[0]指數得到返回的元組(文件名)的第一個值。
("_4_201703150220", "201703150220")[0]成爲"_4_201703150220"

+0

這隻適用於一個案件。我最近編輯了這個問題請參考。謝謝,雖然 –

+0

這與你最初的問題有很大的不同 - 你是否只想保留每一天的最新目錄? – ti7

+0

不是每一天,但U可以考慮。下劃線之間的數字是一個id –