2008-10-29 90 views
2

我正在編寫一個腳本來刪除一週以前的構建工件。Bash腳本,比如日期?

這些文件的名稱形式爲artifact-1.1-200810391018.exe

如何去除大於1周大的文件,排除日期 - 時間戳結束時的小時和分鐘時間?

目前它正在刪除目錄中的所有文件。

#!/bin/sh 

NIGHTLY_LOCATIONS=("/foo" "/bar") 

ARTIFACT_PREFIX="artifact-*-" 

NUM_TO_KEEP=7 

for home in $(seq 0 $((${#NIGHTLY_LOCATIONS[@]} - 1))); do 
     echo "Removing artifacts for" ${NIGHTLY_LOCATIONS[$location]} 

     for file in `find ${NIGHTLY_LOCATIONS[$location]} -name "$ARTIFACT_PREFIX*"`; do 

       keep=true 

       for day in $(seq 0 $((${NUM_TO_KEEP} - 1))); do 
         date=`date --date="$day days ago" +%Y%m%d` 

         echo $(basename $file ".exe") " = " $ARTIFACT_PREFIX$date 

         if [ "$(basename $file ".exe")" != "$ARTIFACT_PREFIX$date" ]; then 
           keep=false 
         fi 
       done 

       if [ !$keep ]; then 
         echo "Removing file" 
         rm -f $file 
       fi 
     done done 
+0

我喜歡VonC的答案,但爲了以防萬一,在那裏你不能依靠一個理由文件系統日期並且必須使用嵌入文件名的時間? – 2008-10-29 21:30:31

回答

7

你的意思是,沿着線的東西:

find /path/to/files -name "artifact*" -type f -mtime +7 -exec rm {} \; 

+0

謝謝,這比我的簡單得多。 – Feet 2008-10-29 22:04:21

2

如果您信任該文件的修改時間,你可以做一個簡單的掃描,以發現:

find "${NIGHTLY_LOCATIONS}" -name $ARTIFACT_PREFIX -type f -mtime +7 -delete 
+0

不錯。 VonC毆打你,但我喜歡 - 刪除「-exec rm {} \;」,我會用它,因爲我不知道關於刪除。謝謝!儘管如此, – 2008-10-29 21:39:36