2008-10-29 8 views
2

1 주 이상 된 빌드 아티팩트를 제거하는 스크립트를 작성 중입니다.Bash 스크립트, 날짜와 일치합니까?

파일의 이름은 이고 이슈 -1 1.1-200810391018.exe입니다.

date-time-stamp의 끝에 시간과 분을 제외하고 1 주 이상 된 파일 만 제거하려면 어떻게합니까?

현재 디렉토리의 모든 파일을 제거하고 있습니다.

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

:

#!/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의 답변을 좋아하지만, 단지 경우에, 당신이 의지 할 수없는 이유가 파일 시스템 날짜와 파일 이름에 포함 된 시간을 사용해야합니까? –

답변

7

당신은,의 라인을 따라 뭔가 의미?

+0

고마워, 그건 내 것보다 훨씬 간단 해. – Feet

2

이 파일의 mtime에를 신뢰하는 경우, 당신은 발견 간단한 청소에 작업을 수행 할 수 있습니다

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

니스. VonC는 당신을 펀치에 맞 춥니 다. 그러나 나는 -delete에 대해 몰랐기 때문에 "-exec rm {} \;"을 통해 -delete를 사용했습니다. 감사! –

+0

-exec rm이 더 이식 가능할 수도 있습니다. – JesperE