Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#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 wink

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 hmm

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 smile

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 smile

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 : GirollServices libres : TdCT.org
Hide in your shell, scripts & astuces :  applications dans un tunnelsmart wgettrouver des pdfinstall. auto de paquetssauvegarde auto♥ awk
  ⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn

Hors ligne