簡體   English   中英

使用Shell腳本刪除除最后5個文件夾以外的所有文件夾

[英]Shell script to delete all folders but the last 5 ones

我正在尋找以下腳本的變體,以刪除除最后創建的五個文件夾以外的所有文件夾:

find ./ -type d -ctime +10 -exec rm -rf {} +

因此,這將刪除10天之前的所有內容。

但是在我看來,時間因素並不總是適用。 我需要類似的腳本來刪除文件夾,但我始終想保留最近創建的5個文件夾(按日期)。

因此,當有100個文件夾時,需要刪除其中的95個並保留最后創建的5個。

當有5個時,需要全部保留。

當有6個時,只需要刪除第一個創建的並保留其他5個。

首先find印有列#1領先的日期,文件sort按日期,忽略從列表中最后5個的最新項目,(那些保留),刪除列#1,然后rm任何舊目錄被保留。 首先測試echo代碼:

find . -type d -printf '%T@ %p\n' | sort -n | 
head -n -5 | cut -f2- -d" " | xargs -0 echo rm -rd

...並且只有在看起來還可以的情況下,才刪除echo來做事:

find . -type d -printf '%T@ %p\n' | sort -n | 
head -n -5 | cut -f2- -d" " | xargs -0 rm -rd

上面的一些代碼是從plundra的“如何在目錄中遞歸查找最新修改的文​​件?”的答案中竊取的。

幾乎未經測試,因此最后是“ ls -ld”! :)

find ./ -type d -printf '%T@ %p\n' | sort -nr | cut -d' ' -f2- | grep "^....*" | tail --lines=+5 | xargs -i ls -ld {}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM