Script Bash, correspond à des dates comme?

J’écris un script pour supprimer certains artefacts de construction datant de plus d’une semaine.

Les fichiers ont des noms sous la forme artefact-1.1-200810391018.exe .

Comment puis-je supprimer uniquement les fichiers de plus d’une semaine, à l’exclusion de l’heure et des minutes à la fin de la date-heure?

Actuellement, il supprime tous les fichiers du répertoire.

#!/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 

Vous voulez dire quelque chose comme:

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

?

Si vous faites confiance au mtime du fichier, vous pouvez le faire en un simple balayage avec find:

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