J'ai beaucoup d'archives de sauvegarde quotidiennes. Pour gérer l'utilisation du disque, j'ai besoin d'un script Bash qui supprimera tous les fichiers de plus d'un mois, mais gardez tous les fichiers créés le lundi, même s'ils sont plus âgés d'un mois.
Par exemple, cela supprimera tous les fichiers modifiés Il y a plus de 30 jours: p> mais je ne sais pas vraiment comment garder les fichiers créés le lundi. p> p>
4 Réponses :
Vous pouvez utiliser pour obtenir la date créée par le fichier. P> extraire la date avec la coupe pour avoir un var-myvar = yyyymmdd p > et enfin utiliser P> date +%u --d $myvar
date +%u --d 20130822
comme trouver code> à ma connaissance n'a pas de chèque de semaine, vous devez appeler un programme externe. find /path/to/files -type f -mtime +30 \
-exec sh -c 'test "$(date +%u -r "$1")" != 1' -- {} \; \
-print # or -delete instead
version légèrement plus simple et plus prudente de la réponse de @ Joso: Les différences: p> Toutefois, @joso a raison de souligner que la date
date -r code> pour obtenir la dernière date de modification d'un fichier directement li>
% A code> pour travailler avec des noms de semaine plus compréhensibles li>
rm "1 $" code> premier à examiner ce qui sera supprimé. Si c'est bien, alors bâton | SH code> à la fin pour exécuter vraiment, ou supprimez le echo code> li>
ul>
Kudos pour le commutateur -r code>. Mais je préfère utiliser % A code> car il dépend de la région locale. C'est probablement en sécurité lorsque vous préparez lc_time = c code> à la commande de date.
Qu'envoyez d'éviter les sous-processus en boucle:
find /path/to/files -type f -mtime +30 -printf '%Ta %p\n' \
| grep -v ^Mon | cut -c5- | tr "\n" "\0" | xargs -0 rm -v
Cela effacera tous les fichiers de plus de 30J. trouver / -name "*" -MTime +30 -exec rm -f {} \; Vous voulez dire que vous voulez garder des fichiers créés lundi même s'ils sont plus âgés d'un mois?
Oui, non. Changera la question