2016-11-15 7 views
1

我在linux機器上運行某種服務器,並使用簡單的bash腳本每隔3天刪除一次文件,每7天刪除一些文件。我使用find命令來做到這一點。但是我的文件被定期保存,這意味着最後一次修改日是當天。所以文件永遠不會被刪除。第一次只爲我工作,因爲它符合條件。我找不到使用創建日期而不是修改日期來刪除這些文件的方法。如何刪除具有X天生命週期而不是上次修改的文件。這是否可能? Linux

這裏是我的簡單腳本:

#!/bin/sh  
while true  
do  
java -server file.jar nogui  
echo ">$(tput setaf 3)STARTING REBOOT$(tput sgr0) $(tput setaf 7)(Ctrl+C To Stop!)$(tput sgr0)"  
find /folder/* -mtime +7 -exec rm -rf {} \;  
find /folder/* -mtime +3 -exec rm -rf {} \;  
find /logs/* -mtime +1 -exec rm -rf {} \;  
echo ">Rebooting in:"  
for i in 5 4 3 2 1  
do  
echo ">$i..."  
sleep 1  
done  
done  

如果有人能幫助我,我會很感激!

+0

你在'find'中有'-ctime'選項以及... –

+0

@ Jean-FrançoisFabre,'ctime'不是創建時間。 –

+0

Linux不會跟蹤文件的「創建日期」。 @ Jean-FrançoisFabre跟蹤inode更改時間的'-ctime'參數,每次更新文件時也會更改此時間。 – larsks

回答

2

不,這是不可能的。標準的Linux文件系統根本不跟蹤創建時間。 (ctime,有時誤認爲創建時間,是元數據更改時間 - 與mtime相比,這是數據修改時間)。


這就是說,肯定會有醜陋的黑客可用。舉例來說,如果你有以下的腳本調用由incron(或不太有效,cron)來記錄文件的創建日期:

#!/bin/bash 
mkdir -p .ctimes 
for f in *; do 
    if [[ -f $f ]] && [[ ! -e .ctimes/$f ]]; then 
    touch ".ctimes/$f" 
    fi 
done 

...那麼你可以看看在.ctimes目錄是超過文件三天,同時刪除標記和它們代表的文件:

#!/bin/bash 
find .ctimes -mtime +3 -type f -print0 | while IFS= read -r -d '' filename; do 
    realname=${filename#.ctimes/} 
    rm -f -- "$filename" "$realname" 
done 
+0

謝謝你指出這一點。你能否推薦另一種方式來做到這一點,我可以安裝一些東西。我知道這聽起來很蹩腳。但這就是我進入Linux的多遠。 –

+0

第一個開始 - 更新文件的代碼是什麼?如果您可以在沒有任何真正更改時停止發生此過程(或者,如果您希望mtime反映創建時間(即使*有*更改),請在重命名之前使用原始替換前版本的日期觸摸該文件在它之上),那麼這個問題就會自行消失。但任何這些都需要在這個問題上沒有提供證據的信息。 –

+0

非常好的主意,但我不能改變代碼,這是javascript的。改變代碼中的某些內容會制止其他事情。好的,有沒有辦法讓它每隔X天刪除一些東西,不管修改日期是什麼? –

2

只是一個想法 - 不要拍... :-)

如果文件不是系統文件自動生成由可以說一些過程服務器日誌文件中,您可能會在文件內回顯創建日期(即在結尾或開始處),然後稍後grep該值以決定是否必須刪除或保留該值。

+0

這些文件不是日誌文件,不能包含任何其他信息,我不能讓它保存內部的信息 –

+0

怎麼樣的日期文件名...? (通過來源或甚至重命名...)。不可能嗎? –

+0

不,文件名必須保持原樣。這真的很傷心......我知道你要去哪裏...... –

2

如果你在ext4文件系統有一些希望。您可以使用statdebugfs實用程序檢索它。 ext4用inode表條目i_crtime存儲創建時間,它是'每個文檔創建時間以秒爲單位的文件創建時間'。參考Link

+0

新的希望!謝謝,會檢查這個鏈接! –

+0

不客氣! – thinkster

+0

'debugfs'需要root權限,否?但是'stat'的可訪問性使得它非常有用。 –

相關問題