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.

#26 Le 26/03/2014, à 17:49

pingouinux

Re : [RESOLU] [script/bash] script permettant de supprimer des fichiers

Oui, ça peut se faire, mais on ne pourra tester les deux mois que sur les dates de modification.

Hors ligne

#27 Le 26/03/2014, à 17:55

malcolm35

Re : [RESOLU] [script/bash] script permettant de supprimer des fichiers

Que se passerai-t-il dans ce cas si on trouve 501222aa01 a été modifié (par erreur) plus récemment que 501222ab01, alors qu on a indique au systeme que le plus récent sérait forcément ab par rapport a aa ?

Hors ligne

#28 Le 26/03/2014, à 17:59

pingouinux

Re : [RESOLU] [script/bash] script permettant de supprimer des fichiers

On peut prendre comme référence de date celle du dernier fichier par ordre alphabétique, et supprimer ceux qui ont été modifiés plus de 60 jours avant.

Ajouté : Ceci, par exemple ?

#!/bin/bash

for fic in *
do
   rac=${fic:0:6}
   printf "%s %s\n" "$rac" "$(stat -c "%n %Y" "$fic")"
done | sort -r | while read rac fic dat
do
   if [ "$rac" = "$rac_av" ]; then
      t1=$dat
      (( (t0-t1)>60*86400 )) && echo rm "$fic"
   else
      t0=$dat
      rac_av="$rac"
   fi
done

Dernière modification par pingouinux (Le 26/03/2014, à 18:09)

Hors ligne

#29 Le 26/03/2014, à 19:08

malcolm35

Re : [RESOLU] [script/bash] script permettant de supprimer des fichiers

C'est vraiment pas mal ! Je pense qu'on s'approche vraiment du but. Je vais essayer demain matin et te tenir informé.

Merci en tout cas !

Hors ligne

#30 Le 27/03/2014, à 09:52

malcolm35

Re : [RESOLU] [script/bash] script permettant de supprimer des fichiers

Bonjour,

Ce script me renvoie tout de même les bons résultats, mais avec des mauvais en plus.
En effet, tous les fichiers n'ont pas le meme format. Je voudrais ne garder que ceux qui ont un format en ******A*....

Voici le retour de la commande :

root@mon-serveur:~/scripts# bash clean.sh
rm pr_20894aa03.mpg
rm pr_20894aa02.mpg
rm pr_20894aa01.mpg
rm panop_1181aa01.mpg
rm panop_1179ab01.mpg
rm panop_1177ah01.mpg
rm panop_1177ag01.mpg
rm 700342a01.mpg
rm 700313a01.mpg
rm 6206072.mpg
rm 61503828.mpg
rm 61503221.mpg
rm 61502227.mpg
rm 530466aa01.mpg
rm 529047aa01.mpg
rm 528785aa01.mpg
rm 526657aa01.mpg
rm 526616aa01.mpg
rm 523516aa01.mpg
rm 521526aa01.mpg
rm 520799ad01.mpg
rm 519055ac01.mpg
rm 518159AC.mpg
rm 516614ac01.mpg
rm 513523AA.mpg
rm 513282AA.mpg
rm 512340AA.mpg
rm 512337AA.mpg
rm 512207AA.mpg
rm 511525AB.mpg
rm 511519ac01.mpg
rm 510287AB.mpg
rm 504613AB.mpg
rm 501889AB.mpg
rm 501251AB.mpg
rm 500909AA.mpg
rm 500765ab01.mpg

rm 3808526.mpg
rm 326695AC.mpg
rm 318809AB.mpg

rm 1982504.mpg
rm 1975002.mpg
rm 1950008.mpg
rm 1950007.mpg
rm 1343434.mpg
rm 1343146.mpg
rm 1343145.mpg
rm 1343143.mpg
rm 1343142.mpg
rm 1343141.mpg
rm 1343140.mpg[

J'ai souligné les bons fichiers smile

Merci !

Dernière modification par malcolm35 (Le 27/03/2014, à 09:53)

Hors ligne

#31 Le 27/03/2014, à 10:52

pingouinux

Re : [RESOLU] [script/bash] script permettant de supprimer des fichiers

Je voudrais ne garder que ceux qui ont un format en ******A*....

Il faudrait que tu précises; en effet, tu classes le fichier 700342a01.mpg, qui correspond au format ci-dessus, dans les mauvais.

Hors ligne

#32 Le 27/03/2014, à 11:06

malcolm35

Re : [RESOLU] [script/bash] script permettant de supprimer des fichiers

Oui, effectivement mais ça n'est pas très important, c'est une exception car il s'appelle 700342a01.mpg, il n'y a donc pas de lettre après le "a".
La synthaxe à isoler est [6 chiffres]A[lettre]

smile

Hors ligne

#33 Le 27/03/2014, à 11:31

pingouinux

Re : [RESOLU] [script/bash] script permettant de supprimer des fichiers

À tester :

#!/bin/bash

while read fic
do
   fic="${fic##*/}"
   rac=${fic:0:6}
   printf "%s %s\n" "$rac" "$(stat -c "%n %Y" "$fic")"
done < <(find -regextype posix-egrep -iregex '.*/[0-9]{6}a[a-z].*') | sort -r | while read rac fic dat
do
   if [ "$rac" = "$rac_av" ]; then
      t1=$dat
      (( (t0-t1)>60*86400 )) && echo rm "$fic"
   else
      t0=$dat
      rac_av="$rac"
   fi
done

Hors ligne

#34 Le 27/03/2014, à 11:59

malcolm35

Re : [RESOLU] [script/bash] script permettant de supprimer des fichiers

Merci !

Semble supprimer les bon fichiers, mais avec des erreurs :

root@monserveur:~/scripts# bash clean.sh
stat: impossible d'évaluer « 510488ab01_ep16à supprimer quand 1ère série 15 faite.mpg »: Aucun fichier ou dossier de ce type
stat: impossible d'évaluer « 513084AAbloquéN23-09-08.mpg »: Aucun fichier ou dossier de ce type
stat: impossible d'évaluer « 514468ab01_ep16à supprimer quand 1ère série 15 faite.mpg »: Aucun fichier ou dossier de ce type
stat: impossible d'évaluer « 525599ab01_ep16à supprimer quand 1ère série 15 faite.mpg »: Aucun fichier ou dossier de ce type
stat: impossible d'évaluer « 527428ab01_ep16à supprimer quand 1ère série 15 faite.mpg »: Aucun fichier ou dossier de ce type
stat: impossible d'évaluer « 527429aa01_ep16à supprimer quand 1ère série 15 faite.mpg »: Aucun fichier ou dossier de ce type
stat: impossible d'évaluer « 528026aa01.mpg »: Aucun fichier ou dossier de ce type
stat: impossible d'évaluer « 520016aa02(à débloquer à la demande de la qualité).mpg »: Aucun fichier ou dossier de ce type
stat: impossible d'évaluer « 520018aa02(à débloquer à la demande de la qualité).mpg »: Aucun fichier ou dossier de ce type
rm 530466aa01.mpg
rm 529047aa01.mpg
rm 528785aa01.mpg
rm 526657aa01.mpg
rm 526616aa01.mpg
rm 523516aa01.mpg
rm 521526aa01.mpg
rm 520799ad01.mpg
rm
rm
rm 519055ac01.mpg
rm 518159AC.mpg
rm 516614ac01.mpg
rm
rm 513523AA.mpg
rm 513282AA.mpg
rm 512340AA.mpg
rm 512337AA.mpg
rm 512207AA.mpg
rm 511525AB.mpg
rm 511519ac01.mpg
rm
rm 510287AB.mpg
rm 504613AB.mpg
rm 501889AB.mpg
rm 501251AB.mpg
rm 500909AA.mpg
rm 500765ab01.mpg
rm 326695AC.mpg
rm 318809AB.mpg

Hors ligne

#35 Le 27/03/2014, à 12:08

pingouinux

Re : [RESOLU] [script/bash] script permettant de supprimer des fichiers

Peux-tu montrer ton script complet clean.sh ?

Hors ligne

#36 Le 27/03/2014, à 12:17

malcolm35

Re : [RESOLU] [script/bash] script permettant de supprimer des fichiers

le voici

#!/bin/bash

cd /mnt/partage

while read fic
do
   fic="${fic##*/}"
   rac=${fic:0:6}
   printf "%s %s\n" "$rac" "$(stat -c "%n %Y" "$fic")"
done < <(find -regextype posix-egrep -iregex '.*/[0-9]{6}a[a-z].*') | sort -r | while read rac fic dat
do
   if [ "$rac" = "$rac_av" ]; then
      t1=$dat
      (( (t0-t1)>60*86400 )) && echo rm "$fic"
   else
      t0=$dat
      rac_av="$rac"
   fi
done

j'ai rajouté un cd /mnt/partage afin qu'il agisse dans le répertoire concerné smile

Hors ligne

#37 Le 27/03/2014, à 12:34

pingouinux

Re : [RESOLU] [script/bash] script permettant de supprimer des fichiers

As-tu une idée de la provenance du texte "à supprimer quand 1ère série 15 faite.mpg" qui apparaît dans les messages d'erreur en #34 ? Est-ce qu'il fait partie du nom des fichiers ?

Hors ligne

#38 Le 27/03/2014, à 15:50

malcolm35

Re : [RESOLU] [script/bash] script permettant de supprimer des fichiers

A priori, ton script à l'air de fonctionner comme je le souhaite smile

Concernant le message d'erreur je m'interroge car effectivement il indique des noms de fichiers comme : à supprimer quand 1ère série 15 faite.mpg
En revanche j'ai parcouru mon dossier et ces fichiers n'existent pas, ou plutôt n'exitent plus. c'est très étrange je n'arrive pas à comprendre la provenance.
Penses-tu qu'il y'a une option de stat qui peut l'expliquer ?

Dans le pire des cas je peux toujours rediriger ce message d'erreur ailleurs s'il est persistant.

Hors ligne

#39 Le 27/03/2014, à 17:06

pingouinux

Re : [RESOLU] [script/bash] script permettant de supprimer des fichiers

Dans le pire des cas je peux toujours rediriger ce message d'erreur ailleurs s'il est persistant.

C'est comme cacher la poussière sous le tapis… smile
Est-ce que les fichiers sont créés, modifiés, ou effacés pendant que le script tourne ?
Il faudrait envisager d'ajouter un test dans la boucle.

Hors ligne

#40 Le 27/03/2014, à 17:47

malcolm35

Re : [RESOLU] [script/bash] script permettant de supprimer des fichiers

Exact smile

Il est possible qu'au moment de l'exécution des fichiers soit créé mais c'est peu probable, le script s'exécutant en moins d'une seconde. J'ai demandé aux personnes concernées de regarder ces noms de fichiers, ils m'ont dit que oui ça a été créé à un moment, mais ça n'existe pas dans le répertoire. Et l'erreur est toujours la même (j'ai exécuté le script une dizaine de fois dans la journée). Mais ces fichiers n'apparaissent pas avec un ls -a, j'ai épluché la totalité du répertoire.

Que proposes-tu comme tests ? smile

Dernière modification par malcolm35 (Le 27/03/2014, à 17:47)

Hors ligne

#41 Le 27/03/2014, à 18:09

pingouinux

Re : [RESOLU] [script/bash] script permettant de supprimer des fichiers

Ah oui. Il faudrait limiter les recherches au répertoire courant. Le script en #33 descend à tort dans l'arborescence. Voici la version corrigée.

#!/bin/bash

while read fic
do
   fic="${fic##*/}"
   rac=${fic:0:6}
   [ -f "$fic" ] || echo "Le fichier $fic n'existe pas"
   printf "%s %s\n" "$rac" "$(stat -c "%n %Y" "$fic")"
done < <(find -maxdepth 1 -regextype posix-egrep -iregex '.*/[0-9]{6}a[a-z].*') | sort -r | while read rac fic dat
do
   if [ "$rac" = "$rac_av" ]; then
      t1=$dat
      (( (t0-t1)>60*86400 )) && echo rm "$fic"
   else
      t0=$dat
      rac_av="$rac"
   fi
done

Dernière modification par pingouinux (Le 27/03/2014, à 18:09)

Hors ligne

#42 Le 27/03/2014, à 18:59

malcolm35

Re : [RESOLU] [script/bash] script permettant de supprimer des fichiers

Je crois que tu as raison et qu'il y'a un sous répertoire qui contient ces fichiers..je n'y ai pas pensé... je vais te confirmer ça demain. Merci encore.

Hors ligne

#43 Le 28/03/2014, à 08:43

malcolm35

Re : [RESOLU] [script/bash] script permettant de supprimer des fichiers

Génial !

En fait il y'avait un répertoire parmi tous les fichiers qui s’appelait "Obsolète" que je n'ai pas vu et qui contenait ces fichiers ! A quel moment à tu précisé de rechercher dans le répertoire courant de ton dernier script ?

Hors ligne

#44 Le 28/03/2014, à 08:49

pingouinux

Re : [RESOLU] [script/bash] script permettant de supprimer des fichiers

A quel moment à tu précisé de rechercher dans le répertoire courant de ton dernier script ?

C'est -maxdepth 1 dans la commande ci-dessous

find -maxdepth 1 -regextype posix-egrep -iregex '.*/[0-9]{6}a[a-z].*')

Hors ligne

#45 Le 28/03/2014, à 08:57

malcolm35

Re : [RESOLU] [script/bash] script permettant de supprimer des fichiers

D'accord.

Bon, en tout cas, un très grand merci à toi pour toute cette aide. Je n'aurai jamais réussi tout seul. Je vais garder ton script bien au chaud qui me resservira plus tard pour en faire d'autres du même type.
Je pense que ce qu'on m'avait demandé est respecté, j'attends que ça soit  validé par les personnes concernées, mais normalement on est bon smile.

Merci d'avoir consacré du temps. Je garde ton contact.

PS : faut-il que je passe le topic en [RESOLU] ? J'ai vu après coup que sur cette section du forum on n'était pas censé demander d'aide.

Hors ligne

#46 Le 28/03/2014, à 09:08

pingouinux

Re : [RESOLU] [script/bash] script permettant de supprimer des fichiers

Il vaut mieux le mettre en résolu (en modifiant ton premier message). Au pire, tu peux demander que toute la discussion soit transférée dans une autre section.

Hors ligne

#47 Le 28/03/2014, à 10:34

malcolm35

Re : [RESOLU] [script/bash] script permettant de supprimer des fichiers

J'ai demandé à ce qu'il soit déplacé dans Utilisation générale => Terminal, scripts et ligne de commande.

Merci encore pour ton aide.

Bonne journée.

Dernière modification par malcolm35 (Le 28/03/2014, à 10:35)

Hors ligne

#48 Le 02/04/2014, à 16:54

pingouinux

Re : [RESOLU] [script/bash] script permettant de supprimer des fichiers

malcolm35 (en message privé) a écrit :

je reviens vers toi pour une petite question concernant le script que nous avions vu ensemble :
je souhaiterai l'adapter sur un autre répertoire identique à la seule exeption qu'il y'a un "p" devant les premiers caractères, mais sinon la syntaxe est identique.
Exemple : P511202AA, P511202AB, etc.... est-ce compliqué à rajouter ? j'ai essayé quelques modifications mais je n'ai pas de résultats.

Qu'as-tu déjà essayé ?

Il devrait suffire de remplacer -iregex '.*/[0-9]{6}a[a-z].*' par -iregex '.*/p[0-9]{6}a[a-z].*' dans la commande find (ligne n° 9 dans le script en #41)

find -maxdepth 1 -regextype posix-egrep -iregex '.*/p[0-9]{6}a[a-z].*'

Ajouté : Il faut aussi remplacer cette ligne (n° 6)

rac=${fic:0:6}

par celle-ci

rac=${fic:0:7}

Dernière modification par pingouinux (Le 03/04/2014, à 04:44)

Hors ligne

#49 Le 02/04/2014, à 23:01

nesthib

Re : [RESOLU] [script/bash] script permettant de supprimer des fichiers

Je n'ai pas lu tout le fil, mais voici une méthode simple et rapide pour obtenir la liste des doublons dans une liste selon les 6 premiers caractères :

find … | awk '_[substr($1, 1, 6)]++'

La commande awk n'affiche que les seconds et suivants doublons, le premier est donc conservé (il suffit donc de trier la lister de façon à ce que les fichiers souhaités soient en premier, ex. le plus récent, le plus ancien, le premier dans l'ordre alphabétique…). La commande awk en elle même ne requiert pas une liste triée.


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

#50 Le 07/04/2014, à 13:06

malcolm35

Re : [RESOLU] [script/bash] script permettant de supprimer des fichiers

@pinguinux

Merci. La solution en #48 fonctionne.

Hors ligne