2015-04-02 35 views
1

我有一個文件夾與一些正常的文件。我想按修改日期對它們進行排序,保留最新的20個條目,並從剩下的條目中刪除超過20天的任何內容。使用shell腳本來排序文件,然後刪除舊文件

這是我的代碼,刪除那些是> 20天的文件。

#!/bin/bash 
cleanup="../some path/" 

find $cleanup/*gz -mtime +20 -exec rm {} \; 

但是,我不知道如何保留最後修改的20個文件,然後做刪除。請問如何解決它?

+0

你應該使用'找到 「$清理」 -name「* .gz「'這樣bash就不會使用'*'擴展。 – 2015-04-02 21:13:10

回答

1

可以過濾20名出與

awk 'NR > 20' 

完整的命令:

find ...... | awk 'NR > 20' | xargs -r rm 

例如

seq 30 | xargs -i echo 'file{}' | awk 'NR > 20' | xargs -r rm 
+0

感謝您的回覆。所以在我的例子中,我應該在哪裏放置| | awk'NR> 20'| please?我有點混淆 – user4441082 2015-04-02 21:06:19

+0

我沒有檢查,但這應該工作''找到$ cleanup/* gz -mtime +20 | awk'NR> 20'| xargs -r rm' – 2015-04-02 21:08:58

+0

謝謝,它非常有用。 – user4441082 2015-04-02 21:18:10

相關問題