2012-11-21 49 views
82

我是shell腳本的新手,任何人都可以幫忙嗎?我想要將文件夾中的腳本從當前日期刪除回10天。 腳本的樣子:在Unix中使用shell腳本刪除超過10天的文件

2012.11.21.09_33_52.script 
2012.11.21.09_33_56.script 
2012.11.21.09_33_59.script 

該腳本將每10天用crontab的運行,這就是爲什麼我需要的當前日期。

+0

你有沒有^ h看看'男人約會'? – Jens

+3

您是否需要根據文件名或文件修改時間進行刪除? – Barmar

+0

我需要一個完整的腳本:)我找到了一個exapmle,但我不知道這是好的:find/home/scripts /。 -name'* .script'-mtime +10 -exec rm -rf'{}'\; – Steve88

回答

283

find是這類任務的常用工具:

find ./my_dir -mtime +10 -type f -delete 

解釋

  • ./my_dir你的目錄(替換w第i個你自己的)超過10天
  • -type f年長
  • -mtime +10文件只
  • -delete並不令人意外。 刪除它執行整個命令

之前測試你的find濾波器和照顧是./my_dir的存在是爲了避免壞的驚喜!

+0

'find /home/scripts/*.script -mtime +10 type f -delete'將可以刪除這些嗎? 2012.11.21.09_33_52.script 2012.11.21.09_33_56.script 2012.11.21.09_33_59.script – Steve88

+0

這取決於修改日期的,像什麼'LS -l'顯示器。日期與'ls -l'相同嗎?但一個簡單的測試會告訴你=) –

+0

是的,這是一個劇本的日期日期 – Steve88

4

如果你能負擔得起通過文件數據的工作,你可以做

find -mmin +14400 -delete 
+1

致[匿名編輯](http://stackoverflow.com/review/suggested-edits/5805137):如果'find'具有'-rm-rf'選項,哪個版本? – glglgl

11

只是調味了shell腳本來刪除舊文件

#!/bin/bash 

timestamp=$(date +%Y%m%d_%H%M%S) 
path="/data/backuplog" 
filename=log_back_$timestamp.txt 
log=$path/$filename 

find $path -name "*.txt" -type f -mtime +7 -print -delete >> $log 

echo "Backup:: Script Start -- $(date +%Y%m%d_%H%M)" >> $log 

START_TIME=$(date +%s) 

... code for backup ...or any other operation .... 


END_TIME=$(date +%s) 

ELAPSED_TIME=$(expr $END_TIME - $START_TIME) 


echo "Backup :: Script End -- $(date +%Y%m%d_%H%M)" >> $log 
echo "Elapsed Time :: $(date -d 00:00:$ELAPSED_TIME +%Hh:%Mm:%Ss) " >> $log 

的代碼基礎上sputnick答案,並增加了一些更多的東西。

  • 日誌文件夾指定
  • 找到一個時間戳命名的日誌文件查找* .txt文件只能在日誌文件夾
  • 日誌文件超過7天被刪除(假設這是一個備份日誌)
  • 音符的開始/結束時間
  • 計算所經過的時間...
+0

Hi @MarcoZen。我有2個'find'和'delete'命令寫入相同的'$ log'。爲什麼它會創建三個日誌文件,前兩個日誌文件沒有內容,最後一個文件的文件列表已被刪除。我該怎麼做才能使find和delete命令不會生成多個文件? –

+0

@FokwaBest - 可以創建另一個日誌文件嗎?時間戳的bcos?你是否完全使用上面的代碼?你可以粘貼我檢查嗎? – MarcoZen

+0

嗨@MarcoZen,我不得不刪除'_%H%M%S'。對於小文件,只生成一個日誌文件,但當要刪除的文件數量很大時,會生成多個日誌文件,其中包含不同的'_%H%M%S'。刪除這部分後,所有內容都寫入一個文件。 –