Pages : 1
#1 Le 23/09/2010, à 23:41
- Uboonty
[Résolu] commande 'date'
Bonjour,
J'ai une tache cron qui me créer tout les jours un fichier se terminant par : `date +%Y%m%d`
Soit par exemple : monfichier_20100924
Ce qui donne le 24 septembre 2010, mais je pense que vous aviez compris
Ce que j'aurais aimé faire c'est supprimer les fichiers vieux de plus de deux semaines ( rm -f xxxxx), mais je n'y arrive pas
Dernière modification par Uboonty (Le 24/09/2010, à 14:50)
Hors ligne
#2 Le 24/09/2010, à 00:16
- NooP
Re : [Résolu] commande 'date'
Bonjour,
Pour cela, tu dois utiliser la commande find :
find /ton/chemin/vers/tes/fichiers -atime +15
Quand tu es sur qu'il te trouve bien les bons fichiers, tu ajoutes la commande RM :
find /ton/chemin/vers/tes/fichiers -atime +15 -exec rm -rf {} \;
PS (1): -atime demande les fichiers non accédés depuis +15 jours.
PS (2): Donne toujours des chemins absolus à find (commençant par /) car en cas de problème, un RM -rf est très dangereux !
Dernière modification par NooP (Le 24/09/2010, à 00:17)
Votez Macron, vous l'aurez dans le fion !
Hors ligne
#3 Le 24/09/2010, à 00:22
- Uboonty
Re : [Résolu] commande 'date'
Merci NooP, ça a l'air de marcher, j'ai mis sa dans mon script pour ceux que sa interesse:
find /monchemin/monfichier_* -atime +15 -exec rm -f {} \;
Dernière modification par Uboonty (Le 24/09/2010, à 00:23)
Hors ligne
#4 Le 24/09/2010, à 00:32
- ehmicky
Re : [Résolu] commande 'date'
Tu peux faire avec l'atime, mais le problème, c'est que si jamais tu ouvres un des fichiers entre temps, cela update leur atime.
Donc si tu veux supprimer les fichiers en fonction de leur date de création et non de leur date de dernier accès (ce qui semblait être ton souhait), tu peux utiliser le timestamp noté dans leur nom de fichier, tu peux aussi faire :
#!/bin/bash
now_sec=$(date "+%s")
#Nombre de jours maximums avant suppression des fichiers
delai_jours=14
#Répertoire où se trouvent tes fichiers nommés monfichier_20100924, monfichier_20100925, etc.
rep_date="/tonrepertoire"
for fich in "$rep_date"/* ; do
fich_time="${fich##*_}"
fich_sec=$(date -d "$fich_time" "+%s")
diff_time=$(( now_sec - fich_sec ))
max_sec=$(( delai_jours * 86400 ))
[[ $diff_time -gt $max_sec ]] && rm -f "$fich"
done
Il y a bien sûr d'autres approches.
Le find est là pour que tu puisses malgré tout mettre d'autres choses dans ce répertoire, du moment qu'ils ne contiennent pas un _ suivi d'au moins 8 chiffres. (edit : corrigé)
Edit : autre approche, mais dépend de ta locale LC_TIME :
#!/bin/bash
#Nombre de jours maximums avant suppression des fichiers
delai_jours=14
date_limite=$(date -d "$delai_jours days ago" "+%Y%m%d")
#Répertoire où se trouvent tes fichiers nommés monfichier_20100924, monfichier_20100925, etc.
rep_date="/tonrepertoire"
for fich in "$rep_date"/* ; do
fich_time="${fich##*_}"
[[ $fich_time -lt $date_limite ]] && rm -f "$fich"
done
Edit : boucle for corrigée
Dernière modification par ehmicky (Le 24/09/2010, à 01:04)
Stego++, bibliothèque libre de stéganographie (avec cryptographie), à venir !
Besoin de votre aide :
Stats sur les compilateurs C++ les plus utilisés
Comment utiliser les archetypes C++ ?
Hors ligne
#5 Le 24/09/2010, à 00:55
- sputnick
Re : [Résolu] commande 'date'
@ehmicky ?
Un bête et classique
find /path -name '*foo*' -mtime +15 -delete
devrais faire l'affaire, et puis ta boucle for sur un find, ça fait peur
Dernière modification par sputnick (Le 24/09/2010, à 00:55)
On ne peut pas mettre d'array dans un string!
https://sputnick.fr/
Hors ligne
#6 Le 24/09/2010, à 01:02
- ehmicky
Re : [Résolu] commande 'date'
C'est juste que l'on sait pas de quel fichier il s'agit. S'il s'agit de fichiers auquel il accède et qu'il modifie de temps en temps, ça fausse l'atime et la mtime, alors que le nom de fichier permet d'être sûr que c'est le temps de création et pas autre chose... Mais bon
PS : j'avoue si c'est juste des fichiers logs, y'a pas besoin de ça...
Dernière modification par ehmicky (Le 24/09/2010, à 01:08)
Stego++, bibliothèque libre de stéganographie (avec cryptographie), à venir !
Besoin de votre aide :
Stats sur les compilateurs C++ les plus utilisés
Comment utiliser les archetypes C++ ?
Hors ligne
#7 Le 24/09/2010, à 13:42
- nesthib
Re : [Résolu] commande 'date'
+1 pour sputnick
sinon pour contourner la limitation de [am]time on peut créer un fichier en forçant la date avec touch et utiliser l'option newer
touch -t 201009241442 reference
find ./ -name '*.pdf' -newer reference
comme ça on peut fixer une date à la minute près
je m'en sers pour ce script de synchro
GUL Bordeaux : Giroll – Services libres : TdCT.org
Hide in your shell, scripts & astuces : applications dans un tunnel – smart wget – trouver des pdf – install. auto de paquets – sauvegarde auto – ♥ awk
⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn
Hors ligne