2017-10-11 49 views
0

我有文件的列表中選擇一個時間列表可以包含:BASH:顯示找到的所有文件,但不會持續2最新

1489247450-filename1 
1489248450-filename2 
1489249450-filename3 
1489249550-filename4 

和另一個時間:

1489249450-filename3 
1489249550-filename4 

和另一個時間:

1489245450-filename1 
1489246450-filename2 
1489247450-filename3 
1489248450-filename4 
1489249450-filename5 
1489249550-filename6 

該清單創建者:

find ./ -type f -name *filename* -exec stat --format="%X-%n" {} \; | sort 

我想選擇所有的文件,但不是2個最新的。

我可以建立一個腳本,它可以計算所有文件並減去2,然後做| head。但有沒有更簡單的方法來做到這一點?

我想在只有2個最新的條件下刪除舊文件。

我不想使用ctime,因爲文件不是定期創建的。

+1

這可能是相關的:http://mywiki.wooledge.org/BashFAQ/003 –

+0

沒有用的:( –

+0

這是令人驚訝的。此外,'ctime'不是文件創建時間,這是文件最後一次更改的時間。也許比'atime'更有用,考慮到[atime'甚至沒有在某些發行版中立即更新](https://unix.stackexchange.com/a/8842/118235) –

回答

0

結果是非常簡單的。

如果您想列出所有文件,但最新的3,你可以這樣做:

find ./ -type f -name "*605*" -exec stat --format="%X-%n" {} \; | sort | head -n -3 

頭-n -3是最主要的!

+1

'sort | head -n-3'與'sort -r |相同尾巴+ 3「。另外,如果你想使這個更強大並且處理包含換行符的文件名,你可以使用'--printf =「%X-%n \ 0」{} \; | sort -z | headn -zn -3'與空字符分開。 –

1

如果該列表是按照正確的順序:

find ./ -type f -name *filename* -exec stat --format="%X-%n" {} \; | sort | tail +3 

否則:

find ./ -type f -name *filename* -exec stat --format="%X-%n" {} \; | sort -r | tail +3 
+0

你不知道有多少文件在那裏,所以它沒有用。 –

+0

我不明白你的觀點。這個聲明只會產生所有的結果,但是你不知道有多少個文件只有兩個是不重要的,但是如果你想知道,可以將其傳遞給wc -l。 –

+0

啊,我在下面的回答中看到,你可能把「尾巴+3」誤認爲「尾巴-3」,並且在反對之前沒有嘗試過。是的 - 「尾巴-3」只有在有五個文件時纔會起作用(這會導致一個有效的反對意見,即「你不知道有多少文件存在」)。但「尾巴+3」的情況並非如此。 –

相關問題