2008-10-29 93 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