2017-08-15 102 views
1

我們有像「分貝 _YYYY-MM-DD」備份foldernames。bash腳本:使用日期在文件夾名稱進行計算的(刪除超過X舊的文件夾)

是否有某種類型的命令/表達式可用於比較文件夾(名稱)日期與當前(系統)日期並刪除比X天更早的任何東西?

背景: 我們已經嘗試過「發現」和「-mtime + X」,而是因爲它在修改/刪除文件夾之後內的文件更新修改時間是不是一個完美的解決方案..

這是一種罕見的疾病,但使得-mtime比較「故障」,所以我期待一個替代和該文件夾的名稱不創建/備份過程中不斷改變/修改 ..

回答

0

您可以使用下面的方法來生成文件夾名稱

#foldername="db_"`date "+%Y-%m-%d"` 
#echo $foldername 
db_2017-08-15 
#mkdir $foldername 

現在你可以比較喜歡串用給定日期

所以7天舊的日期將是

givenDate="db_"`date -v-7d "+%Y-%m-%d"` 

如果($文件夾名> $ givenDate)

True if foldername sorts after givenDate lexicographically. 
+0

但是如果一個月有什麼不同? –

+0

它也可以做月份和年份的技巧。年份首先比較,然後是月份,然後是日期 – nagendra547

+0

另外我還提供了一種計算x天后的日期的方法。做檢查 – nagendra547

0

好有關YYYY-MM-DD日期格式的事情是字典比較順序與時間順序匹配。因此,你可以簡單地從你的目錄名中提取備份日期,並將其與相同格式的相應日期的比較結果爲一個字符串:

backupdirname=db_2017-08-12 
X=6 

backupdate="${backupdirname: -10}" 
dropdate="$(date -d "$X days ago" +%Y-%m-%d)" 

if [[ "$backupdate" < "$dropdate" ]] 
then 
    echo "Delete $backupdirname" 
else 
    echo "Keep $backupdirname" 
fi 
0
ref_date=$(date -d '2017-01-02' +%s) 
for file in ./db_*; do 
    file_time=$(date -d ${file#*db_} +%s) 
    if [[ $file_time > $ref_date ]]; then 
     echo "$file date is newer than ref date" 
     # ... 
    else 
     echo "$file date is older or euqal to ref date" 
     # ... 
    fi 
done 
相關問題