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 14/10/2007, à 16:26

yurek

[resolu]supprimer des anciens fichiers par rap. au nom

Bonjour
il me manque un morceau de code pour supprimer la 3eme plus vieille sauvegarde sachant que le fichier s'appelle XXX-jour-mois-année.tar.gz

Je commence par

if
ls | sed | xargs rm
else
fi

voila! j'ai vraiment pas d'idée... help.
merci
au revoir

Dernière modification par yurek (Le 28/10/2007, à 22:37)


http://doc.ubuntu-fr.org/installation/debutants
http://doc.ubuntu-fr.org/diagnostic
http://doc.ubuntu-fr.org/diagnostic_outils
http://doc.ubuntu-fr.org/reflexe_ubunteros

Hors ligne

#2 Le 14/10/2007, à 16:46

xtriade

Re : [resolu]supprimer des anciens fichiers par rap. au nom

bonjour, merci, au revoir : vous connaissez ?


Hadopi = loi débile

Hors ligne

#3 Le 14/10/2007, à 17:08

yurek

Re : [resolu]supprimer des anciens fichiers par rap. au nom

excuse tu a raison c'est parce que je suis sur le forum depuis quelque heure et j'avais déja dit BJ merci au revoir peu etre pas mais bon...


http://doc.ubuntu-fr.org/installation/debutants
http://doc.ubuntu-fr.org/diagnostic
http://doc.ubuntu-fr.org/diagnostic_outils
http://doc.ubuntu-fr.org/reflexe_ubunteros

Hors ligne

#4 Le 14/10/2007, à 17:13

Link31

Re : [resolu]supprimer des anciens fichiers par rap. au nom

#!/bin/bash

# Dossier contenant les fichiers à traiter
DIR="dossier"

# Nombre de fichiers les plus anciens à afficher
NBR=1

# Trie les fichiers selon leur ancienneté et affiche les $NBR fichiers les plus anciens
cd "$DIR" && find . -maxdepth 1 -printf "%A@|%p\n" | sort | cut -d"|" -f2 | tail -n$NBR

# Suppression de ces fichiers...

Hors ligne

#5 Le 14/10/2007, à 17:28

yurek

Re : [resolu]supprimer des anciens fichiers par rap. au nom

oh merci c'est un début.
C'est très compliqué alors j'ai essayer de comprendre:
tu fait un find (le point qui sert a ???) l'option -maxdepth à 1 permet détendre la commande à d'autre via des pipes ?? l'option printf %A@ affiche la date!! désolé je ne suis plus. Pourrait tu développer pour que je puisse l'adapter à mon script?

Je l'ai un peu tester mais il ne fonctionne pas correctement.

Dernière modification par yurek (Le 14/10/2007, à 18:23)


http://doc.ubuntu-fr.org/installation/debutants
http://doc.ubuntu-fr.org/diagnostic
http://doc.ubuntu-fr.org/diagnostic_outils
http://doc.ubuntu-fr.org/reflexe_ubunteros

Hors ligne

#6 Le 14/10/2007, à 18:37

Link31

Re : [resolu]supprimer des anciens fichiers par rap. au nom

Le point c'est juste parce que j'ai commencé par écrire la commande find avant de penser au cd "$DIR", il représente le dossier courant. On pourrait le remplacer par "find "$DIR" ..." (dans ce cas, plus besoin de cd "$DIR" avant).

-maxdepth 1 c'est pour éviter de parcourir les sous-dossiers.

Après, c'est simple : le find affiche les résultats sous la forme date|fichier  grâce au -printf (avec la date en secondes depuis l'Epoch), la commande sort trie ces résultats grâce à la date, la commande cut récupère le nom du fichier après le "|" et la commande tail n'affiche que les $NBR plus anciens (ceux en bas de la liste).

Peut-être qu'il faudrait forcer sort à trier par valeur plutôt que par ordre alphabétique, c'est peut-être la cause de ton problème (ça semblait fonctionner chez moi).

Sinon, si tu veux trouver les fichiers qui datent de plus de $NBR jours :

find "$DIR" -atime +$NBR

et pour les supprimer au passage (attention à bien vérifier le résultat de la commande précédente avant !) :

find "$DIR" -atime +$NBR -delete

Dernière modification par Link31 (Le 14/10/2007, à 18:37)

Hors ligne

#7 Le 14/10/2007, à 19:18

yurek

Re : [resolu]supprimer des anciens fichiers par rap. au nom

OKOK j'ai compris merci pour ton explication

J'ai compris pourquoi ca ne marche pas parce que j'ai crée des fichiers et je les ai nommer 12, 13, 14, 15 . Ces nom signifie le jour de créations mais j'ai crée le 12 avant le 15 d'ou mon erreur.
Ce qu'il faudrai c'est que le script supprime en fonction du nom et non de la date de création ou de modification de fichier sinon ca me posera des problèmes parce que ces fichiers serons déplacer dans un autre répertoire et la seul constante c'est le nom du fichier...
M'a tu compris?

oupsje retire c'est faux
<del>
un
ls | grep tar.gz | tail -n$NBR
ca donne la meme chose!!</del>

Dernière modification par yurek (Le 14/10/2007, à 19:26)


http://doc.ubuntu-fr.org/installation/debutants
http://doc.ubuntu-fr.org/diagnostic
http://doc.ubuntu-fr.org/diagnostic_outils
http://doc.ubuntu-fr.org/reflexe_ubunteros

Hors ligne

#8 Le 14/10/2007, à 19:42

yurek

Re : [resolu]supprimer des anciens fichiers par rap. au nom

voici par exemple:

laptop:~/sauvegarde$ ls | grep tar.gz

firefoxbackup-14-10-2007.tar.gz
firefoxbackup-15-10-2007.tar.gz
gaimbackup-11-10-2007.tar.gz
gaimbackup-12-10-2007.tar.gz
gaimbackup-13-10-2007.tar.gz
gaimbackup-14-10-2007.tar.gz
thunderbirdbackup-14-10-2007.tar.gz

laptop:~/sauvegarde$ ls | grep tar.gz | <commande>

gaimbackup-14-10-2007.tar.gz
thunderbirdbackup-14-10-2007.tar.gz

au lieu de m'afficher ce résultat il devrait m'afficher tout les fichiers ayant pour nom le 14 et le 15:

laptop:~/sauvegarde$<commande magique>

firefoxbackup-14-10-2007.tar.gz
firefoxbackup-15-10-2007.tar.gz
gaimbackup-14-10-2007.tar.gz
thunderbirdbackup-14-10-2007.tar.gz

donc ce probleme vient du fait qu'il existe plusieurs sauvegardes de nom différent pour le meme jours.


http://doc.ubuntu-fr.org/installation/debutants
http://doc.ubuntu-fr.org/diagnostic
http://doc.ubuntu-fr.org/diagnostic_outils
http://doc.ubuntu-fr.org/reflexe_ubunteros

Hors ligne

#9 Le 14/10/2007, à 19:58

Link31

Re : [resolu]supprimer des anciens fichiers par rap. au nom

Alors essaie une commande comme ça (pour supprimer les 3 plus vieilles sauvegardes selon leur date) :

for i in $(ls *.tar.gz -1 | cut -d"." -f1 | awk -F "backup-" '{print $2}' | sort -u | head -n3); do echo "rm -f *$i*"; done

Enlève le echo et les guillemets autour du rm si tu es satisfait du résultat.

Hors ligne

#10 Le 14/10/2007, à 20:11

yurek

Re : [resolu]supprimer des anciens fichiers par rap. au nom

JE M'INCLINE
RESPECT
Merci Beaucoup.

Dernière modification par yurek (Le 14/10/2007, à 20:11)


http://doc.ubuntu-fr.org/installation/debutants
http://doc.ubuntu-fr.org/diagnostic
http://doc.ubuntu-fr.org/diagnostic_outils
http://doc.ubuntu-fr.org/reflexe_ubunteros

Hors ligne

#11 Le 14/10/2007, à 23:14

yurek

Re : [resolu]supprimer des anciens fichiers par rap. au nom

alors je vien de déceler un petit probleme dans cette commande. imaginons que pour une raison ou une autre on ai besoin de relancer ce script ta commande va donc supprimer les sauvegarde ne n-3 niveau donc a chaque execution il supprimera 3 niveau de plus: nous somme le 14 illustration voici nos fichiers de départ:

firefoxbackup-14-10-2007.tar.gz
firefoxbackup-15-10-2007.tar.gz
gaimbackup-11-10-2007.tar.gz
gaimbackup-12-10-2007.tar.gz
gaimbackup-13-10-2007.tar.gz
gaimbackup-14-10-2007.tar.gz
thunderbirdbackup-14-10-2007.tar.gz

première execution il reste:

firefoxbackup-14-10-2007.tar.gz
firefoxbackup-15-10-2007.tar.gz
gaimbackup-14-10-2007.tar.gz
thunderbirdbackup-14-10-2007.tar.gz
deuxieme execution il reste:
<vide>

il faudrait ajouter une condition a ce for pour tester un nombre minimal de sauvegarde de départ pour son execution et ce en fonction du nombre de sauvegarde, pas de  la date.
Je cherche de mon coté.

Dernière modification par yurek (Le 14/10/2007, à 23:15)


http://doc.ubuntu-fr.org/installation/debutants
http://doc.ubuntu-fr.org/diagnostic
http://doc.ubuntu-fr.org/diagnostic_outils
http://doc.ubuntu-fr.org/reflexe_ubunteros

Hors ligne

#12 Le 15/10/2007, à 09:40

yurek

Re : [resolu]supprimer des anciens fichiers par rap. au nom

if (! $(ls *.tar.gz -1 | cut -d"." -f1 | awk -F "backup-" '{print $2}'| head -c2) = $(date +%d) ) then
{
echo "a suprimer";
else echo "rien rien rien"
}
fi

Voici mon code pour vérifier si le fichier de sauvegarde d'aujourd'hui existe ou pas mais il ne marche pas et je comprend pas pourquoi...


http://doc.ubuntu-fr.org/installation/debutants
http://doc.ubuntu-fr.org/diagnostic
http://doc.ubuntu-fr.org/diagnostic_outils
http://doc.ubuntu-fr.org/reflexe_ubunteros

Hors ligne

#13 Le 15/10/2007, à 12:45

Sleipnir

Re : [resolu]supprimer des anciens fichiers par rap. au nom

Bjr,

yurek a écrit :

JE M'INCLINE
RESPECT
Merci Beaucoup.

Ohhh , tu peux, j'en profite pour m'incliner également, link31 te sort du code comme une poule pond un oeuf... Parfois tu te casses la tête à sortir un code de 10 lignes, il arrive et te sort une ligne plus efficasse que tes 10 lignes...( c'est même frustrant parfois, mais c'est comme ça qu'on apprends) .

Je préviens de suite, je suis loin du niveau à link31... ( très loin même ).
En prenant le code de link31 et y ajouter ce que tu veux faire :

#!/bin/bash
DATE=`date +%d`
#là faut se placer dans le bon repertoire et ensuite faire...
for i in $(ls *.tar.gz -1 | cut -d"." -f1 | awk -F "backup-" '{print $2}' | sort -u | head -n3)
 do 
  if ( "$i" = "$DATE" ); then
     echo "fichier du jour, donc pas de suppression"
 else
     echo "rm -f *$i*"
  fi
done
exit

Je n'ai pas essayé, ça te mettra peut être sur la voie, sinon attends le "maître" link31, je suis sur qu'il va te régler ça en 1 lignes beaucoup plus propre.
Sinon pour les erreurs de ton dernier post, il manque un point virgule, le point d'exclamation... et les accolades...???Je ne sais pas trop.

if ( $(ls *.tar.gz -1 | cut -d"." -f1 | awk -F "backup-" '{print $2}'| head -c2) = $(date +%d) ); then
 echo "ne pas supprimer"
else
 echo "supprimer"
fi

Si tu débutes, je trouve plus simple d'écrire sur plusieurs lignes, ensuite tu peux réduire si besoin.

Hors ligne

#14 Le 15/10/2007, à 13:13

Link31

Re : [resolu]supprimer des anciens fichiers par rap. au nom

Si tu veux conserver les sauvegardes datant de moins de 3 jours :

export KEEP=2; for i in $(ls *.tar.gz -1 | cut -d"." -f1 | awk -F "backup-" '{print $2}' | sort -u); do if [[ `echo $i|cut -d"-" -f1` < $((`date +%d`-$KEEP)) ]]; then echo "rm -f *$i*"; fi; done

Dernière modification par Link31 (Le 15/10/2007, à 13:13)

Hors ligne

#15 Le 15/10/2007, à 13:15

yurek

Re : [resolu]supprimer des anciens fichiers par rap. au nom

	echo "Les fichiers plus vieux de " $temp " niveau sont en cours de suppressions"
		for i in $(ls $sauv/*.tar.gz -1 | cut -d"." -f1 | awk -F "backup-" '{print $2}' | sort -u | head -n$temp -c2 ); 
			do
				if ( $i = $DATE ); then
				     echo "Sauvegarde du jour, suppression annulée"
				else echo "rm -f *$i*"
				fi

			done

voici la fonction temp il indique commande inconnue a cette ligne :if ( $i = $DATE ); then

Link31 trop fort. non je m'y connais un peu jme débrouille.


http://doc.ubuntu-fr.org/installation/debutants
http://doc.ubuntu-fr.org/diagnostic
http://doc.ubuntu-fr.org/diagnostic_outils
http://doc.ubuntu-fr.org/reflexe_ubunteros

Hors ligne

#16 Le 15/10/2007, à 13:23

Sleipnir

Re : [resolu]supprimer des anciens fichiers par rap. au nom

C'est du grand art, rien à dire ( enfin si, c'est quand que je serais aussi bon...? )
Comme d'habitude, bâclé en 1 ligne....( je vais arrêter de poster , link31 est trop fort ! )

Hors ligne

#17 Le 15/10/2007, à 13:29

Sleipnir

Re : [resolu]supprimer des anciens fichiers par rap. au nom

yurek a écrit :

voici la fonction temp il indique commande inconnue a cette ligne :if ( $i = $DATE ); then

Link31 trop fort. non je m'y connais un peu jme débrouille.

Peut etre ( vu que ces des chiffres..; link31 pourra peut être m'éclairer !)

if (( "$i" = "$DATE" )); then
ou
 if ( "$i" == "$DATE" ); then

Mais c'est inutile, link31 à proposer une seul ligne....

Hors ligne

#18 Le 15/10/2007, à 13:49

Link31

Re : [resolu]supprimer des anciens fichiers par rap. au nom

Il y a quand même un souci pour les changements de mois et d'année (si on lance la commande le 1er jour du mois par exemple).

Avec cette commande, ça devrait être réglé :

export KEEP=2; for i in $(ls *.tar.gz -1 | cut -d"." -f1 | awk -F "backup-" '{print $2}' | sort -u); do if [[ $((`echo $i|cut -d"-" -f1|sed 's/0*//'`+100*`echo $i|cut -d"-" -f2|sed 's/0*//'`+10000*`echo $i|cut -d"-" -f3|tail -c3|sed 's/0*//'`)) < $((`date +%d`+100*`date +%m`+10000*`date +%y`-$KEEP+1)) ]]; then echo "rm -f *$i*"; fi; done

(la commande commence à devenir un peu longue, je me demande si ça vaudrait le coup de revenir à la ligne... difficile à dire tongue)

edit: eh non, ça ne passe toujours pas bien les fins de mois. Je dois y aller, je verrai ça plus tard.

Dernière modification par Link31 (Le 15/10/2007, à 17:17)

Hors ligne

#19 Le 15/10/2007, à 13:55

yurek

Re : [resolu]supprimer des anciens fichiers par rap. au nom

Link31 t'est pas humain......


http://doc.ubuntu-fr.org/installation/debutants
http://doc.ubuntu-fr.org/diagnostic
http://doc.ubuntu-fr.org/diagnostic_outils
http://doc.ubuntu-fr.org/reflexe_ubunteros

Hors ligne

#20 Le 15/10/2007, à 13:56

Sleipnir

Re : [resolu]supprimer des anciens fichiers par rap. au nom

yurek a écrit :

Link31 t'est pas humain......

+1

Hors ligne

#21 Le 15/10/2007, à 17:16

Link31

Re : [resolu]supprimer des anciens fichiers par rap. au nom

Pas humain... Vous dites ça parce que vous n'avez jamais vu de monstre.

La référence ultime, c'est :
http://www.de.ioccc.org/years.html

D'ailleurs, je devrais y participer. Je suis en train d'écrire la plus petite implémentation possible de certaines fonctions de la libc. Quelques exemples :

char*strncat(char*d, const char*s, size_t l){char*t=d;while(*++d); for(;l--;*d++=*s++);return t;}
char*strncpy(char*d, const char*s, size_t l){char*t=d;for(;l--;*d++=*s?*s++:0);return t;}

Si vous trouvez plus court, n'hésitez pas à me le dire.

En passant, la commande shell donnée plus haut a toujours du mal avec les fins de mois...

Dernière modification par Link31 (Le 15/10/2007, à 17:18)

Hors ligne

#22 Le 15/10/2007, à 20:24

yurek

Re : [resolu]supprimer des anciens fichiers par rap. au nom

c'est quoi de ce charabia...


http://doc.ubuntu-fr.org/installation/debutants
http://doc.ubuntu-fr.org/diagnostic
http://doc.ubuntu-fr.org/diagnostic_outils
http://doc.ubuntu-fr.org/reflexe_ubunteros

Hors ligne

#23 Le 16/10/2007, à 18:36

yurek

Re : [resolu]supprimer des anciens fichiers par rap. au nom

BONJOUR,
Aujourd'hui j'ai rpis le train.
Je suis claqué mais j'ai encore un peu d'energie pour mettre ce post et je DECLARE que j'ai trouvé une nouvelle methode qui évite de se compliquer la vie la réponse était la toute bete. je la poste:
$temp c'est le nombre de sauvegarde recent a ne pas supprimer

function temp
{
##$(ls $sauv/*.tar.gz -1 | cut -d"." -f1 | awk -F "backup-" '{print $2}' | sort -u | head -n$temp -c2 )
                # morceau de code de Link31 modifé pas Yurek#
        echo "Les fichiers plus vieux de " $temp " niveau sont en cours de suppressions"
                ligne=100;
                while (! $temp=$ligne);
                        do
                                ls $sauv/*.tar.gz -1 | cut -d"." -f1 | awk -F "backup-" '{print $2}' | sort -u > delindex.txt
                                ligne=$(cat delindex.txt | wc -l);
                                del=$(cat delindex.txt | head -n1)
                                rm *$del*
                                echo "suppression de "*$del*""
                        done
                echo "tous les ancienes sauvegardes de plus de " $temp "niveau ont été supprimer."

Mais mauvaise nouvelle mon while ne fonctionne pas c'est bizzard. au moment de l'égalité il ne sort pas de la boucle. Help help help...

Dernière modification par yurek (Le 16/10/2007, à 21:07)


http://doc.ubuntu-fr.org/installation/debutants
http://doc.ubuntu-fr.org/diagnostic
http://doc.ubuntu-fr.org/diagnostic_outils
http://doc.ubuntu-fr.org/reflexe_ubunteros

Hors ligne

#24 Le 28/10/2007, à 22:44

yurek

Re : [resolu]supprimer des anciens fichiers par rap. au nom

et enfin voici ma fonction temp qui fonctionne superbement bien:

function temp
{
		# morceau de code de Link31 modifé pas Yurek#
	echo "# Les fichiers plus vieux de " $temp " niveau sont en cours de suppressions" ;

		while (true)
			do
				ls $sauv/*.tar.gz -1 | cut -d"." -f1 | awk -F "backup-" '{print $2}' | sort -u > $sauv/aaa/delindex.txt ;

				echo "# L'index des fichiers est cree." ;
				ligne=$(cat $sauv/aaa/delindex.txt | wc -l);

				del=$(cat $sauv/aaa/delindex.txt | head -n1) ;
				if (test 0 -eq $ligne) ; then   
				echo "Aucun fichier de sauvegarde a supprimer !" ;
				break
				fi
				if (test $temp -ge $ligne) ; then       #optimisation
				break					# break casse le while
					else 
					echo "# Suppression des fichiers datant du "*$del*; 
					rm $sauv/*$del*;
				fi
			done

		echo "# Tous les ancienes sauvegardes de plus de " $temp "niveau ont ete supprimer." ;
}

http://doc.ubuntu-fr.org/installation/debutants
http://doc.ubuntu-fr.org/diagnostic
http://doc.ubuntu-fr.org/diagnostic_outils
http://doc.ubuntu-fr.org/reflexe_ubunteros

Hors ligne

#25 Le 28/10/2007, à 22:47

yurek

Re : [resolu]supprimer des anciens fichiers par rap. au nom

Pour le script complet:

http://forum.ubuntu-fr.org/viewtopic.php?id=154670

Dernière modification par yurek (Le 01/11/2007, à 04:10)


http://doc.ubuntu-fr.org/installation/debutants
http://doc.ubuntu-fr.org/diagnostic
http://doc.ubuntu-fr.org/diagnostic_outils
http://doc.ubuntu-fr.org/reflexe_ubunteros

Hors ligne