2013-07-30 88 views
0

我正在寫zsh腳本,其中我必須從當前日期獲得前90天的日期,即我必須從當前日期減去90天。然後我必須檢查具有不同日期的文件夾作爲他們的名字。我必須比較目錄日期和減去的日期,如果結果大於減去的日期,我必須刪除目錄。刪除基於日期的目錄

例如:

讓我們說CURRENT_DATE = 20131130(年月日)

subtracted_date = CURRENT_DATE - 90天

可以說有一個文件夾20130621

現在這個文件夾名稱應該與減去的日期進行比較。如果大於subtracted_date,那麼我必須刪除目錄。

+0

出於實用的目的,您可能還會對3個月而非90天感興趣。這將是相當微不足道的。 –

+0

但是每個月都不會有30天。並且它的客戶端規範說明該文件夾在90天后會被完全刪除。 – Jahnavi

+0

查看目錄的名稱(計算機上沒有「文件夾」)並計算當天午夜的紀元時間。添加90 * 24 * 3600(忽略夏令時偏移)。與當前時間比較。根據需要刪除。 –

回答

0

您可以使用date命令查找當前日期90天前的日期。下面的腳本應該給你需要刪除的目錄列表:

del=$(date --date="90 days ago" +%Y%m%d) 
for i in `find . -type d -name "2*"`; do 
    (($del > $(basename $i))) && echo "delete $i" || echo "dont delete $i" 
done 

要執行目錄的實際刪除,你可以用下面的替換第三行:

(($del > $(basename $i))) && rm -rf $i 

例如,如果當前目錄包含以下文件夾:

$ ls -1F 
20120102/ 
20130104/ 
20130302/ 
20130402/ 
20130502/ 
20130602/ 
20130702/ 

執行上面的腳本會告訴:

$ bash cleanup 
delete ./20130302 
delete ./20130104 
delete ./20120102 
delete ./20130402 
dont delete ./20130702 
dont delete ./20130502 
dont delete ./20130602 
+0

嗨....有一個名稱爲20130717的文件夾。現在它的提示我也刪除此文件夾。 – Jahnavi

+0

'date --date =「90 days ago」+%Y%m%d'你係統上的回報是什麼? – devnull

+0

這是結果:20130501 – Jahnavi

3
find path -type d -ctime +90 -exec rm -rf {} \; 

,應找出所有目錄年齡超過90天,使用RM -rf他們

小心那個命令雖然你可能會想這個

find path -type d -ctime +90 -exec echo {} \; 

在第一測試爲了保持某些文件夾考慮-mtime而不是-ctime並且每隔一段時間觸摸文件夾

替換path以上要掃描並刪除

解釋

find是命令

path的實際路徑是要掃描

-type d意味着尋找目錄僅

根目錄

-ctime +90表示創建時間超過90天

-exec rm -rf {} \;手段遞歸刪除和強制刪除被發現

-mtime被修改時間的項目

第二個命令會列出該會因此刪除所有文件夾更安全,而你正在測試

運行
+0

嗨... 你能解釋一下我的命令嗎?我的意思是旗幟和他們的用途?我實際上是unix的新手 – Jahnavi

+0

比較是基於目錄名而不是ctime。也許它們在這種情況下是等價的,也許ctime實際上比名稱更合適,但也許不是。 –

+0

將其添加到帖子 – exussum

0

列出目錄之前刪除

find . -type f -ctime +60 -ls 

列表文件之前在當前目錄刪除

find . -type f -ctime +60 -ls 

刪除目錄

find . -type d -ctime +60 -exec rm -rf {} \; 

刪除的文件在當前目錄

find . -type f -ctime +60 -exec rm -rf {} \;