Скрипт bash, совпадать по датам вроде? - PullRequest
2 голосов
/ 30 октября 2008

Я пишу скрипт для удаления некоторых артефактов сборки старше 1 недели.

Файлы имеют имена в виде 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

Ответы [ 2 ]

7 голосов
/ 30 октября 2008

Вы имеете в виду, что-то вроде:

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

2 голосов
/ 30 октября 2008

Если вы доверяете mtime файла, вы можете сделать это с помощью команды find:

find "${NIGHTLY_LOCATIONS}" -name $ARTIFACT_PREFIX -type f -mtime +7 -delete
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...