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 11/09/2022, à 18:54

philoeil

[RESOLU]Erreur execution script bash suite mise à jour distribution

Bonjour,
J'ai migré sous la version ubuntu suivante :
~$ cat /etc/lsb-release && uname -a
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=22.04
DISTRIB_CODENAME=jammy
DISTRIB_DESCRIPTION="Ubuntu 22.04.1 LTS"
Linux philippe-G750JH 5.15.0-46-generic #49-Ubuntu SMP Thu Aug 4 18:03:25 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux
J'ai constaté une erreur d'exécution dans 1 script bash et je me demande si l'erreur indiqué veut dire que je ne suis pas sous bash
Je ne comprends pas bien pourquoi
Si vous pouvez me confirmer ou m'expliquer ce que je dois vérifier ?
Dans la première ligne de mon script j'ai bien
    #!/bin/bash
Dans \bin j'ai bien bash
Quand je vérifie la version bash j'ai
   

$ bash --version
    GNU bash, version 5.1.16(1)-release (x86_64-pc-linux-gnu)
    Copyright (C) 2020 Free Software Foundation, Inc.
    Licence GPLv3+ : GNU GPL version 3 ou ultérieure <http://gnu.org/licenses/gpl.html>
    Ceci est un logiciel libre ; vous être libre de le modifier et de le redistribuer.
    AUCUNE GARANTIE n'est fournie, dans les limites permises par la loi.

En cours de script j'ai l'erreur suivante
     

Début de Info3 <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< :
    /bin/sh: 1: -maxdepth: not found

comme si maxdepth n'était pas une option valide

    Correspondant aux lignes d'exécution suivantes
             

echo -e "\n----------------------------------------------------------\n\tDébut de Info3\nLe resultat \"Info3 = liste des noms des répertoires\" est présent dans $CheminActionDbl/$DateJ.SauvegardeInfo3.txt\n---------------------------------------------------------\n" | tee -a "$CheminJournal" | tee -a "$CheminJournalDeveloppeur"
              echo -e " Optionnel : Afficher les répertoires avec le nombre de doublons dans ce répertoire et le nombre de fichiers présents\n(Le nombre de doublons comprend les originaux)\n" | tee -a "$CheminJournalDeveloppeur"
        ...
           awk 'BEGIN { print "\n Début de Info3 <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< : "; FS=" § " }
           {
              if (/^\s*§+/) { next }
              else
                 { NomRep[$1]=$1; NbRepDbl[$1]+=1;
           "find \""NomRep[$1]"\" -maxdepth 1 -type f | wc -l" | getline NbDblonRep[$1]};
           }
           END { for ( Dblon in NbRepDbl) {
              printf("Repertoire doublon : %15s ===> %3d doublons sur %3s " , NomRep[Dblon] , NbRepDbl[Dblon] , NbDblonRep[Dblon] );
              print("fichiers \n");
           }
           print "Info3 terminé";
           }' "$REP" | tee "$CheminActionDbl/$DateJ.SauvegardeInfo3.txt"

Merci pour votre aide

Dernière modification par philoeil (Le 17/09/2022, à 20:54)

Hors ligne

#2 Le 11/09/2022, à 19:40

Watael

Re : [RESOLU]Erreur execution script bash suite mise à jour distribution

salut,

quelle ratatouille !

cette commande awk ne donnerait de toute façon pas le nombre de doublons dans un répertoire donné, mais le nombre de lignes* qu'affiche la commande find.

c'est toi qui a fait ça ? mais pourquoi ?! smile

--
* ce qui ne coïncide pas nécessairement avec le nombre des fichiers !


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#3 Le 11/09/2022, à 20:13

philoeil

Re : [RESOLU]Erreur execution script bash suite mise à jour distribution

Bonjour,
Merci Watael
Désolé pour ma ratatouille (quoi que j'ai une bonne recette...)
et
Si si cela marchait jusqu'à il y a peu

Parceque $REP représente la liste du résultat des doublons trouvés dans une commande précédent cette portion de script
L'objet de cette partie et juste de rappeler une information sur le nombre de doublons trouvé par dossier

Mais là n'est pas vraiment ma question...
Pourquoi l'option de find "-maxdepth 1" ne marche plus ?

Je vais m'absenter 3 jours, je reprendrai le fil de cette discussion plus tard.
A+

Hors ligne

#4 Le 11/09/2022, à 20:33

Watael

Re : [RESOLU]Erreur execution script bash suite mise à jour distribution

pas très intuitif comme nom de variable; on s'attend plutôt à ce qu'elle contienne le nom d'un répertoire.

on va plancher, mais ce n'est pas du bash, là, c'est du awk.
et ce ne sera pas évident sans le fichier à traiter.

Dernière modification par Watael (Le 11/09/2022, à 20:38)


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#5 Le 11/09/2022, à 21:14

Watael

Re : [RESOLU]Erreur execution script bash suite mise à jour distribution

awk a peut-être changé :

ls -l /usr/bin/*awk*

Dernière modification par Watael (Le 11/09/2022, à 21:15)


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#6 Le 11/09/2022, à 21:24

philoeil

Re : [RESOLU]Erreur execution script bash suite mise à jour distribution

Bonjour,

Le resultat de la commande :

ls -l /usr/bin/*awk*
lrwxrwxrwx 1 root root     21 août  20 19:55 /usr/bin/awk -> /etc/alternatives/awk
-rwxr-xr-x 1 root root 158504 janv. 23  2022 /usr/bin/mawk
lrwxrwxrwx 1 root root     22 août  20 19:55 /usr/bin/nawk -> /etc/alternatives/nawk

Hors ligne

#7 Le 11/09/2022, à 21:28

philoeil

Re : [RESOLU]Erreur execution script bash suite mise à jour distribution

Bonjour,
Le fichier test exemple $REP

 cat ActionDoublons.txt 
§§§§§§  Empreinte MD5 identique pour : 04084955f7f41c5c310df99ba1fc6dcf  des fichiers suivants :
/home/philippe/Documents/JeCodeShell/ShellEssaiRepDblons/T8Racine/B/BB/MiroirDeAA_FichCach § XAAA_C_MetaPhoto.xmp § 3,62396e-05 § Sun Sep 11 15:58:35.6721122640 2022 §  dernier accès le dimanche 11 septembre 2022 à 16:18:04.6527639990 § 04084955f7f41c5c310df99ba1fc6dcf 
/home/philippe/Documents/JeCodeShell/ShellEssaiRepDblons/T8Racine/C/C_AAAMiroirMoins_ProtegerDeSuppression § X_AAA_C_MetaPhoto.xmp § 3,62396e-05 § Sun Sep 11 15:58:36.5441127740 2022 §  dernier accès le dimanche 11 septembre 2022 à 16:18:04.7127640330 § 04084955f7f41c5c310df99ba1fc6dcf 
/home/philippe/Documents/JeCodeShell/ShellEssaiRepDblons/T8Racine/A/AA_FichCach/AAA § AAA_C_MetaPhoto.xmp § 3,62396e-05 § Sun Sep 11 15:58:36.1721125560 2022 §  dernier accès le dimanche 11 septembre 2022 à 16:18:04.7407640470 § 04084955f7f41c5c310df99ba1fc6dcf 
/home/philippe/Documents/JeCodeShell/ShellEssaiRepDblons/T8Racine/A/AA_FichCach § AAA_C_MetaPhoto.xmp § 3,62396e-05 § Sun Sep 11 15:58:35.7001122800 2022 §  dernier accès le dimanche 11 septembre 2022 à 16:18:04.7567640560 § 04084955f7f41c5c310df99ba1fc6dcf 
§§§§§§  Empreinte MD5 identique pour : 2616c513a5244b17d4832c8b6f0b0cc3  des fichiers suivants :
/home/philippe/Documents/JeCodeShell/ShellEssaiRepDblons/T8Racine/C/C_AAAMiroirMoins_ProtegerDeSuppression § XC_AAA3.pdf § 2,41787 § Sun Sep 11 15:58:36.5441127740 2022 §  dernier accès le dimanche 11 septembre 2022 à 16:18:04.6967640230 § 2616c513a5244b17d4832c8b6f0b0cc3 
/home/philippe/Documents/JeCodeShell/ShellEssaiRepDblons/T8Racine/A/AA_FichCach/AAA § AAA3.pdf § 2,41787 § Sun Sep 11 15:58:35.9641124350 2022 §  dernier accès le dimanche 11 septembre 2022 à 16:18:04.7207640360 § 2616c513a5244b17d4832c8b6f0b0cc3 
§§§§§§  Empreinte MD5 identique pour : 270489072435df7ce259820380f1b206  des fichiers suivants :
/home/philippe/Documents/JeCodeShell/ShellEssaiRepDblons/T8Racine/C/C_AAAMiroirMoins_ProtegerDeSuppression § XC_AAA2.pdf § 2,41787 § Sun Sep 11 15:58:36.4641127270 2022 §  dernier accès le dimanche 11 septembre 2022 à 16:18:04.6887640190 § 270489072435df7ce259820380f1b206 
/home/philippe/Documents/JeCodeShell/ShellEssaiRepDblons/T8Racine/A/AA_FichCach/AAA § AAA2.pdf § 2,41787 § Sun Sep 11 15:58:36.1721125560 2022 §  dernier accès le dimanche 11 septembre 2022 à 16:18:04.7327640430 § 270489072435df7ce259820380f1b206 
§§§§§§  Empreinte MD5 identique pour : 557e783f36365cefda2d7e07bd14fff7  des fichiers suivants :
/home/philippe/Documents/JeCodeShell/ShellEssaiRepDblons/T8Racine/B/BB/MiroirDeAA_FichCach § .XAAFichCahe.ini § 4,1008e-05 § Sun Sep 11 15:58:35.4761121490 2022 §  dernier accès le dimanche 11 septembre 2022 à 16:18:04.6407639920 § 557e783f36365cefda2d7e07bd14fff7 
/home/philippe/Documents/JeCodeShell/ShellEssaiRepDblons/T8Racine/A/AA_FichCach § .AAFichCahe.ini § 4,1008e-05 § Sun Sep 11 15:58:35.8201123500 2022 §  dernier accès le dimanche 11 septembre 2022 à 16:18:04.7687640620 § 557e783f36365cefda2d7e07bd14fff7 
§§§§§§  Empreinte MD5 identique pour : 721c2a0b699fdcdcd44cbe03b84e9caf  des fichiers suivants :
/home/philippe/Documents/JeCodeShell/ShellEssaiRepDblons/T8Racine/B/BB/MiroirDeAA_FichCach § XAA1.pdf § 2,41787 § Sun Sep 11 15:58:35.5921122180 2022 §  dernier accès le dimanche 11 septembre 2022 à 16:18:04.6447639950 § 721c2a0b699fdcdcd44cbe03b84e9caf 
/home/philippe/Documents/JeCodeShell/ShellEssaiRepDblons/T8Racine/A/AA_FichCach § AA1.pdf § 2,41787 § Sun Sep 11 15:58:35.9001123970 2022 §  dernier accès le dimanche 11 septembre 2022 à 16:18:04.7767640660 § 721c2a0b699fdcdcd44cbe03b84e9caf 
§§§§§§  Empreinte MD5 identique pour : 882cd9453eef312a4308882d0a781bfd  des fichiers suivants :
/home/philippe/Documents/JeCodeShell/ShellEssaiRepDblons/T8Racine/C/C_AAAMiroirMoins_ProtegerDeSuppression § .XFichCahe.ini § 2,67029e-05 § Sun Sep 11 15:58:36.5441127740 2022 §  dernier accès le dimanche 11 septembre 2022 à 16:18:04.7087640300 § 882cd9453eef312a4308882d0a781bfd 
/home/philippe/Documents/JeCodeShell/ShellEssaiRepDblons/T8Racine/A/AA_FichCach/AAA § .FichCahe.ini § 2,67029e-05 § Sun Sep 11 15:58:35.9001123970 2022 §  dernier accès le dimanche 11 septembre 2022 à 16:18:04.7167640340 § 882cd9453eef312a4308882d0a781bfd 
§§§§§§  Empreinte MD5 identique pour : f91bd61e81abf9ece5a4c4132ca950fc  des fichiers suivants :
/home/philippe/Documents/JeCodeShell/ShellEssaiRepDblons/T8Racine/B/BB/MiroirDeAA_FichCach § XAA2.pdf § 2,41787 § Sun Sep 11 15:58:35.6721122640 2022 §  dernier accès le dimanche 11 septembre 2022 à 16:18:04.6607640030 § f91bd61e81abf9ece5a4c4132ca950fc 
/home/philippe/Documents/JeCodeShell/ShellEssaiRepDblons/T8Racine/A/AA_FichCach § AA2.pdf § 2,41787 § Sun Sep 11 15:58:35.8201123500 2022 §  dernier accès le dimanche 11 septembre 2022 à 16:18:04.7607640580 § f91bd61e81abf9ece5a4c4132ca950fc 

Si cela peut aider...

Hors ligne

#8 Le 11/09/2022, à 21:35

philoeil

Re : [RESOLU]Erreur execution script bash suite mise à jour distribution

Bonjour,
Pour aider j'ai retrouvé un échange sur une difficulté rencontrée, lors de la mise en place de cette portion de code
Question forum 2020

Merci

Hors ligne

#9 Le 11/09/2022, à 21:35

Watael

Re : [RESOLU]Erreur execution script bash suite mise à jour distribution

teste avec nawk,

"find..." |getline

fonctionne chez moi aussi bien avec gawk que nawk.


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#10 Le 13/09/2022, à 17:25

philoeil

Re : [RESOLU]Erreur execution script bash suite mise à jour distribution

Bonjour,
Merci Watael, je n'ai pas accès à mon PC et ne peut tester tout de suite.

Tu sembles suggérer de remplacer toutes mes commandes awk par gawk ou nawk,
N'y a-t-il pas une autre solution pour retrouver mon script fonctionnel ? (avec awk)

Merci

Hors ligne

#11 Le 13/09/2022, à 18:05

Watael

Re : [RESOLU]Erreur execution script bash suite mise à jour distribution

ça t'embête d'ajouter une lettre devant la commande ? smile
que dit

$ realpath /etc/alternatives/awk

ou

$ update-alternatives --get-selections | grep awk

?
peut-être redéfinir l'alternatives (# update-alternatives --config awk), qui fait le lien entre awk et la commande réellement utilisée par le système...

Dernière modification par Watael (Le 13/09/2022, à 18:08)


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#12 Le 16/09/2022, à 07:09

philoeil

Re : [RESOLU]Erreur execution script bash suite mise à jour distribution

Bonjour,
Merci Watael
Les retours des commandes demandées :

$ realpath /etc/alternatives/awk
/usr/bin/mawk
$ update-alternatives --get-selections | grep awk
awk                            auto     /usr/bin/mawk
Watael a écrit :

ça t'embête d'ajouter une lettre devant la commande

J'aimerai comprendre pourquoi
Si je partage mon code je dois dire quoi à l'utilisateur sur les conditions requise à l'installation. Je pensais seulement que seul bash était nécessaire

A+

Hors ligne

#13 Le 16/09/2022, à 08:47

MicP

Re : [RESOLU]Erreur execution script bash suite mise à jour distribution

Bonjour

… Je pensais seulement que seul bash était nécessaire …

Ce pourrait être le cas mais pour ça il faudrait que ton script n'utilise que des commandes bash
mais awk, tee, find et wc ne sont pas des commandes internes (builtins) du bash

Dernière modification par MicP (Le 16/09/2022, à 13:21)

Hors ligne

#14 Le 17/09/2022, à 09:24

philoeil

Re : [RESOLU]Erreur execution script bash suite mise à jour distribution

Bonjour,
(Me revoila...)
Alors j'ai testé et finalement je ne pense pas que ce soit un problème limité à awk mais plutôt à find -maxdepth | wc -l

Ci-dessous j'ai remplacé awk par nawk (le résultat est identique)
(Le remplacement par gawk donne :

./Info3_V2.sh: ligne 79: gawk : commande introuvable

)

ci-desous un code test isolant et reproduisant (au mieux) les circonstances de l'erreur

#!/bin/bash
DateJ="20200908"
CheminActionDbl="./"
# Info test REP doit représenter la liste des chemins en doublons et doit correspondre à 1 réalité de la liste des fichiers et dossiers
# Test actuel sur copie de ActionDoublons.txt dans ~/DgitAspi/Aspi3/Aspi/JournalT8SavTestSauvegarde$ et fichiers dans /home/philippe/Documents/JeCodeShell/ShellEssaiRepDblons/T8Racine/
REP="ActionDoublons.txt"
CheminJournal="./Journal.txt"
CheminJournalDeveloppeur="./JournalDeveloppeur.txt"
CheminJournalErreur="./JournalErreur.txt"
TermTTY=$(tty)
 Verbeux="true"

# Verbeux="false"
echo "Mode Verbeux=$Verbeux"
# Création des journaux

CheminActionDbl="."

truncate -s 0 "$CheminJournalErreur"
truncate -s 0 "$CheminJournalDeveloppeur"
truncate -s 0 "$CheminJournal"




FermeRedirectionS()
{
   exec 5>&1  # Lie le descripteur de fichier #5 avec stdout.
   exec 2> >(tee -a "$CheminJournalErreur" "$CheminJournalDeveloppeur" "$CheminJournal" >&2) # envoie les erreurs dans les journaux et les affiche sur stderr
   if [[ ! "$Verbeux" == "true" ]] # <<<<<<<<<<<<<<<<<<<<<<  ferme la redirection SELECT stdout selon mode verbeux ou non
   then # Mode verbeux FALSE
   exec >>"$CheminJournalDeveloppeur"  # envoie stdout dans le #5 et dans le CheminJournalDeveloppeur

   else  # Mode verbeux true
   exec 1> >(tee -a "$CheminJournalDeveloppeur" >&1) # envoie stdout dans le #1 et dans le CheminJournalDeveloppeur
   fi
   sleep 0.01 # bricolage pour laisser le temps = petit temps d'attente avant de commencer à écrire directement sur la sortie standard, pour que la précédente écriture dans tee soit purgée :

}



   # --------------------------------------------- INFO 3---------------------------------------------------------
   if [[ ! "$Verbeux" == "true" ]] # >>>>>>>>>>>>>>>>>>>>>>>>>>>  OUVRE la redirection stdout selon mode verbeux ou non Affiche texte suivant dans les 2 cas
   then
      exec 1>"$TermTTY" # re affiche les commande suivante sur stdout et interrompt l'envoi de stdout au  journal developpeur

      echo -e "\n----------------------------------------------------------\n\tDébut de Info3\nLe resultat \"Info3 = liste des noms des répertoires\" est présent dans $CheminActionDbl/$DateJ.SauvegardeInfo3.txt\n---------------------------------------------------------\n" | tee -a "$CheminJournal" | tee -a "$CheminJournalDeveloppeur"
      echo -e " Optionnel : Afficher les répertoires avec le nombre de doublons dans ce répertoire et le nombre de fichiers présents\n(Le nombre de doublons comprend les originaux)\n" | tee -a "$CheminJournalDeveloppeur"
      FermeRedirectionS # Penser à lancer fonction FermeRedirectionS si non plus de passage des commandes dans le JournalDeveloppeur

   else
      echo -e "\n----------------------------------------------------------\n\tDébut de Info3\nLe resultat \"Info3 = liste des noms des répertoires\" est présent dans $CheminActionDbl/$DateJ.SauvegardeInfo3.txt\n---------------------------------------------------------\n" | tee -a "$CheminJournal"
      echo -e " Optionnel : Afficher les répertoires avec le nombre de doublons dans ce répertoire et le nombre de fichiers présents\n(Le nombre de doublons comprend les originaux)\n"
   fi
   nawk 'BEGIN { print "\n Début de Info3 <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< : "; FS=" § " }
   {
      if (/^\s*§+/) { next }
      else

         { NomRep[$1]=$1; NbRepDbl[$1]+=1;
printf ("NomRep " NomRep[$1] "--- Nbre Chps :" NF "NbRepDbl---" NbRepDbl[$1] " \n");

"find " NomRep[$1] " -maxdepth 1 -type f | wc -l" | getline NbDblonRep[$1]}
   printf ("Nombre de fichier dans " NomRep[$1] " est de " NbDblonRep[$1] " \n");
   }

   END { for ( Dblon in NbRepDbl) {

      printf("Repertoire doublon : %15s ===> %3d doublons sur %3s " , NomRep[Dblon] , NbRepDbl[Dblon] , NbDblonRep[Dblon] );
      print("fichiers \n");
   }
   print "Info3 terminé";

   }' "$REP" | tee "$CheminActionDbl/$DateJ.SauvegardeInfo3.txt"
   if [[ ! "$Verbeux" == "true" ]] # >>>>>>>>>>>>>>>>>>>>>>>>>>>  OUVRE la redirection stdout selon mode verbeux ou non Affiche texte suivant dans les 2 cas
   then
      exec 1>"$TermTTY" # re affiche les commande suivante sur stdout et interrompt l'envoi de stdout au  journal developpeur
      2>&1 read -p  "Info3 terminé
      Confirmer la volonté d'ouverture immédiate de ce fichier  $CheminActionDbl/$DateJ.SauvegardeInfo3.txt...... Y pour YES" RepFic1

      if [[ "$RepFic1" == "Y" ]]  # IF RepFicSuppr
      then #  IF RepFic1
      cat "$CheminActionDbl/$DateJ.SauvegardeInfo3.txt"
      fi # IF RepFic1
      unset RepFic1
      FermeRedirectionS

   fi

La sortie :

$ ./Info3_V2.sh 
Mode Verbeux=true

----------------------------------------------------------
	Début de Info3
Le resultat "Info3 = liste des noms des répertoires" est présent dans ./20200908.SauvegardeInfo3.txt
---------------------------------------------------------

 Optionnel : Afficher les répertoires avec le nombre de doublons dans ce répertoire et le nombre de fichiers présents
(Le nombre de doublons comprend les originaux)


 Début de Info3 <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< : 
NomRep /home/philippe/Documents/JeCodeShell/ShellEssaiRepDblons/T8Racine/B/BB/MiroirDeAA_FichCach--- Nbre Chps :6NbRepDbl---1 
/bin/sh: 1: -maxdepth: not found
Nombre de fichier dans /home/philippe/Documents/JeCodeShell/ShellEssaiRepDblons/T8Racine/B/BB/MiroirDeAA_FichCach est de 0 
NomRep /home/philippe/Documents/JeCodeShell/ShellEssaiRepDblons/T8Racine/C/C_AAAMiroirMoins_ProtegerDeSuppression--- Nbre Chps :6NbRepDbl---1 
Nombre de fichier dans /home/philippe/Documents/JeCodeShell/ShellEssaiRepDblons/T8Racine/C/C_AAAMiroirMoins_ProtegerDeSuppression est de  
NomRep /home/philippe/Documents/JeCodeShell/ShellEssaiRepDblons/T8Racine/A/AA_FichCach/AAA--- Nbre Chps :6NbRepDbl---1 
Nombre de fichier dans /home/philippe/Documents/JeCodeShell/ShellEssaiRepDblons/T8Racine/A/AA_FichCach/AAA est de  
NomRep /home/philippe/Documents/JeCodeShell/ShellEssaiRepDblons/T8Racine/A/AA_FichCach--- Nbre Chps :6NbRepDbl---1 
Nombre de fichier dans /home/philippe/Documents/JeCodeShell/ShellEssaiRepDblons/T8Racine/A/AA_FichCach est de  
NomRep /home/philippe/Documents/JeCodeShell/ShellEssaiRepDblons/T8Racine/C/C_AAAMiroirMoins_ProtegerDeSuppression--- Nbre Chps :6NbRepDbl---2 
Nombre de fichier dans /home/philippe/Documents/JeCodeShell/ShellEssaiRepDblons/T8Racine/C/C_AAAMiroirMoins_ProtegerDeSuppression est de  
NomRep /home/philippe/Documents/JeCodeShell/ShellEssaiRepDblons/T8Racine/A/AA_FichCach/AAA--- Nbre Chps :6NbRepDbl---2 
Nombre de fichier dans /home/philippe/Documents/JeCodeShell/ShellEssaiRepDblons/T8Racine/A/AA_FichCach/AAA est de  
NomRep /home/philippe/Documents/JeCodeShell/ShellEssaiRepDblons/T8Racine/C/C_AAAMiroirMoins_ProtegerDeSuppression--- Nbre Chps :6NbRepDbl---3 
Nombre de fichier dans /home/philippe/Documents/JeCodeShell/ShellEssaiRepDblons/T8Racine/C/C_AAAMiroirMoins_ProtegerDeSuppression est de  
NomRep /home/philippe/Documents/JeCodeShell/ShellEssaiRepDblons/T8Racine/A/AA_FichCach/AAA--- Nbre Chps :6NbRepDbl---3 
Nombre de fichier dans /home/philippe/Documents/JeCodeShell/ShellEssaiRepDblons/T8Racine/A/AA_FichCach/AAA est de  
NomRep /home/philippe/Documents/JeCodeShell/ShellEssaiRepDblons/T8Racine/B/BB/MiroirDeAA_FichCach--- Nbre Chps :6NbRepDbl---2 
Nombre de fichier dans /home/philippe/Documents/JeCodeShell/ShellEssaiRepDblons/T8Racine/B/BB/MiroirDeAA_FichCach est de 0 
NomRep /home/philippe/Documents/JeCodeShell/ShellEssaiRepDblons/T8Racine/A/AA_FichCach--- Nbre Chps :6NbRepDbl---2 
Nombre de fichier dans /home/philippe/Documents/JeCodeShell/ShellEssaiRepDblons/T8Racine/A/AA_FichCach est de  
NomRep /home/philippe/Documents/JeCodeShell/ShellEssaiRepDblons/T8Racine/B/BB/MiroirDeAA_FichCach--- Nbre Chps :6NbRepDbl---3 
Nombre de fichier dans /home/philippe/Documents/JeCodeShell/ShellEssaiRepDblons/T8Racine/B/BB/MiroirDeAA_FichCach est de 0 
NomRep /home/philippe/Documents/JeCodeShell/ShellEssaiRepDblons/T8Racine/A/AA_FichCach--- Nbre Chps :6NbRepDbl---3 
Nombre de fichier dans /home/philippe/Documents/JeCodeShell/ShellEssaiRepDblons/T8Racine/A/AA_FichCach est de  
NomRep /home/philippe/Documents/JeCodeShell/ShellEssaiRepDblons/T8Racine/C/C_AAAMiroirMoins_ProtegerDeSuppression--- Nbre Chps :6NbRepDbl---4 
Nombre de fichier dans /home/philippe/Documents/JeCodeShell/ShellEssaiRepDblons/T8Racine/C/C_AAAMiroirMoins_ProtegerDeSuppression est de  
NomRep /home/philippe/Documents/JeCodeShell/ShellEssaiRepDblons/T8Racine/A/AA_FichCach/AAA--- Nbre Chps :6NbRepDbl---4 
Nombre de fichier dans /home/philippe/Documents/JeCodeShell/ShellEssaiRepDblons/T8Racine/A/AA_FichCach/AAA est de  
NomRep /home/philippe/Documents/JeCodeShell/ShellEssaiRepDblons/T8Racine/B/BB/MiroirDeAA_FichCach--- Nbre Chps :6NbRepDbl---4 
Nombre de fichier dans /home/philippe/Documents/JeCodeShell/ShellEssaiRepDblons/T8Racine/B/BB/MiroirDeAA_FichCach est de 0 
NomRep /home/philippe/Documents/JeCodeShell/ShellEssaiRepDblons/T8Racine/A/AA_FichCach--- Nbre Chps :6NbRepDbl---4 
Nombre de fichier dans /home/philippe/Documents/JeCodeShell/ShellEssaiRepDblons/T8Racine/A/AA_FichCach est de  
Repertoire doublon : /home/philippe/Documents/JeCodeShell/ShellEssaiRepDblons/T8Racine/B/BB/MiroirDeAA_FichCach ===>   4 doublons sur   0 fichiers 

Repertoire doublon : /home/philippe/Documents/JeCodeShell/ShellEssaiRepDblons/T8Racine/A/AA_FichCach/AAA ===>   4 doublons sur     fichiers 

Repertoire doublon : /home/philippe/Documents/JeCodeShell/ShellEssaiRepDblons/T8Racine/A/AA_FichCach ===>   4 doublons sur     fichiers 

Repertoire doublon : /home/philippe/Documents/JeCodeShell/ShellEssaiRepDblons/T8Racine/C/C_AAAMiroirMoins_ProtegerDeSuppression ===>   4 doublons sur     fichiers 

Info3 terminé

Comment contourner le problème ?

Merci pour votre aide

Hors ligne

#15 Le 17/09/2022, à 10:29

Tawal

Re : [RESOLU]Erreur execution script bash suite mise à jour distribution

Hello,

Un test chez moi (avec gawk, nawk et mawk installés):

$ 
$ nawk 'BEGIN{a="/home/tawal/Term"; "find " a " -maxdepth 1 -type f | wc -l" | getline b; print b}'
11
$ gawk 'BEGIN{a="/home/tawal/Term"; "find " a " -maxdepth 1 -type f | wc -l" | getline b; print b}'
11
$ mawk 'BEGIN{a="/home/tawal/Term"; "find " a " -maxdepth 1 -type f | wc -l" | getline b; print b}'
/bin/sh: 1: -maxdepth: not found
0
$

On voit que ton erreur vient de mawk.
Donc installe gawk, l'installation devrait mettre à jour l'alternative à la commande awk vers gawk.


Le savoir n'a d’intérêt que si on le transmet.
Useless Use of Cat Award
Filenames and Pathnames in Shell: How to do it Correctly
À chaque problème sa solution, à chaque solution son moyen, si pas de moyen, toujours le problème !

Hors ligne

#16 Le 17/09/2022, à 10:32

philoeil

Re : [RESOLU]Erreur execution script bash suite mise à jour distribution

Bonjour,
Pour info j'ai testé sur un autre PC

~$ cat /etc/lsb-release && uname -a
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=18.04
DISTRIB_CODENAME=bionic
DISTRIB_DESCRIPTION="Ubuntu 18.04.6 LTS"
Linux nad-E5430 4.15.0-192-generic #203-Ubuntu SMP Wed Aug 10 17:40:03 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux

et le resultat est correct

$ ./Info3_V2.sh 
Mode Verbeux=true

----------------------------------------------------------
	Début de Info3
Le resultat "Info3 = liste des noms des répertoires" est présent dans ./20200908.SauvegardeInfo3.txt
---------------------------------------------------------

 Optionnel : Afficher les répertoires avec le nombre de doublons dans ce répertoire et le nombre de fichiers présents
(Le nombre de doublons comprend les originaux)


 Début de Info3 <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< : 
NomRep /home/nad/philippe/TestInfo32/T8Racine/B/BB/MiroirDeAA_FichCach--- Nbre Chps :6NbRepDbl---1 
Nombre de fichier dans /home/nad/philippe/TestInfo32/T8Racine/B/BB/MiroirDeAA_FichCach est de 4 
NomRep /home/nad/philippe/TestInfo32/T8Racine/C/C_AAAMiroirMoins_ProtegerDeSuppression--- Nbre Chps :6NbRepDbl---1 
Nombre de fichier dans /home/nad/philippe/TestInfo32/T8Racine/C/C_AAAMiroirMoins_ProtegerDeSuppression est de 4 
NomRep /home/nad/philippe/TestInfo32/T8Racine/A/AA_FichCach/AAA--- Nbre Chps :6NbRepDbl---1 
Nombre de fichier dans /home/nad/philippe/TestInfo32/T8Racine/A/AA_FichCach/AAA est de 5 
NomRep /home/nad/philippe/TestInfo32/T8Racine/A/AA_FichCach--- Nbre Chps :6NbRepDbl---1 
Nombre de fichier dans /home/nad/philippe/TestInfo32/T8Racine/A/AA_FichCach est de 4 
NomRep /home/nad/philippe/TestInfo32/T8Racine/C/C_AAAMiroirMoins_ProtegerDeSuppression--- Nbre Chps :6NbRepDbl---2 
Nombre de fichier dans /home/nad/philippe/TestInfo32/T8Racine/C/C_AAAMiroirMoins_ProtegerDeSuppression est de 4 
NomRep /home/nad/philippe/TestInfo32/T8Racine/A/AA_FichCach/AAA--- Nbre Chps :6NbRepDbl---2 
Nombre de fichier dans /home/nad/philippe/TestInfo32/T8Racine/A/AA_FichCach/AAA est de 5 
NomRep /home/nad/philippe/TestInfo32/T8Racine/C/C_AAAMiroirMoins_ProtegerDeSuppression--- Nbre Chps :6NbRepDbl---3 
Nombre de fichier dans /home/nad/philippe/TestInfo32/T8Racine/C/C_AAAMiroirMoins_ProtegerDeSuppression est de 4 
NomRep /home/nad/philippe/TestInfo32/T8Racine/A/AA_FichCach/AAA--- Nbre Chps :6NbRepDbl---3 
Nombre de fichier dans /home/nad/philippe/TestInfo32/T8Racine/A/AA_FichCach/AAA est de 5 
NomRep /home/nad/philippe/TestInfo32/T8Racine/B/BB/MiroirDeAA_FichCach--- Nbre Chps :6NbRepDbl---2 
Nombre de fichier dans /home/nad/philippe/TestInfo32/T8Racine/B/BB/MiroirDeAA_FichCach est de 4 
NomRep /home/nad/philippe/TestInfo32/T8Racine/A/AA_FichCach--- Nbre Chps :6NbRepDbl---2 
Nombre de fichier dans /home/nad/philippe/TestInfo32/T8Racine/A/AA_FichCach est de 4 
NomRep /home/nad/philippe/TestInfo32/T8Racine/B/BB/MiroirDeAA_FichCach--- Nbre Chps :6NbRepDbl---3 
Nombre de fichier dans /home/nad/philippe/TestInfo32/T8Racine/B/BB/MiroirDeAA_FichCach est de 4 
NomRep /home/nad/philippe/TestInfo32/T8Racine/A/AA_FichCach--- Nbre Chps :6NbRepDbl---3 
Nombre de fichier dans /home/nad/philippe/TestInfo32/T8Racine/A/AA_FichCach est de 4 
NomRep /home/nad/philippe/TestInfo32/T8Racine/C/C_AAAMiroirMoins_ProtegerDeSuppression--- Nbre Chps :6NbRepDbl---4 
Nombre de fichier dans /home/nad/philippe/TestInfo32/T8Racine/C/C_AAAMiroirMoins_ProtegerDeSuppression est de 4 
NomRep /home/nad/philippe/TestInfo32/T8Racine/A/AA_FichCach/AAA--- Nbre Chps :6NbRepDbl---4 
Nombre de fichier dans /home/nad/philippe/TestInfo32/T8Racine/A/AA_FichCach/AAA est de 5 
NomRep /home/nad/philippe/TestInfo32/T8Racine/B/BB/MiroirDeAA_FichCach--- Nbre Chps :6NbRepDbl---4 
Nombre de fichier dans /home/nad/philippe/TestInfo32/T8Racine/B/BB/MiroirDeAA_FichCach est de 4 
NomRep /home/nad/philippe/TestInfo32/T8Racine/A/AA_FichCach--- Nbre Chps :6NbRepDbl---4 
Nombre de fichier dans /home/nad/philippe/TestInfo32/T8Racine/A/AA_FichCach est de 4 
Repertoire doublon : /home/nad/philippe/TestInfo32/T8Racine/A/AA_FichCach ===>   4 doublons sur   4 fichiers 

Repertoire doublon : /home/nad/philippe/TestInfo32/T8Racine/A/AA_FichCach/AAA ===>   4 doublons sur   5 fichiers 

Repertoire doublon : /home/nad/philippe/TestInfo32/T8Racine/B/BB/MiroirDeAA_FichCach ===>   4 doublons sur   4 fichiers 

Repertoire doublon : /home/nad/philippe/TestInfo32/T8Racine/C/C_AAAMiroirMoins_ProtegerDeSuppression ===>   4 doublons sur   4 fichiers 

Info3 terminé

Merci pour votre aide

Hors ligne

#17 Le 17/09/2022, à 11:03

philoeil

Re : [RESOLU]Erreur execution script bash suite mise à jour distribution

Bonjour,
Merci Tawal effectivement cela marche
Il semblerait que je n'ai pas le choix il va falloir donc changer tous mes awk par gawk dans le code

Vous pouvez me confirmer ?

Si je mets à disposition mon code cela veut dire qu'il faut préciser la version de quoi ? (bash awk ...)

Merci

Hors ligne

#18 Le 17/09/2022, à 13:51

Watael

Re : [RESOLU]Erreur execution script bash suite mise à jour distribution

ça se code : vérifier que les programmes indispensables sont disponibles.
bash étant le shell d'appel dans le shebang, si il n'est pas présent sur le système, le script ne s'exécutera avec une erreur.

#!/bin/bash

indispensables=( gawk )
for prog in "${indispensables[@]}"; do which "$prog" || { >&2 echo "$prog pas trouvé"; exit 1;}; done

Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#19 Le 17/09/2022, à 20:52

philoeil

Re : [RESOLU]Erreur execution script bash suite mise à jour distribution

Bonjour,
Merci Watael
Je retiens la suggestion,
En regardant sur le web comment identifier les commandes non builtin de mon script, cela m'apparait impossible

J'en déduis que je ne dois peut-être pas m'en préoccuper.

Le shell n'est sans doute plus adapté à mon script qui est devenu trop gros,
Je n'avais pas perçu que cela deviendrai avec le temps et les évolutions des distributions un problème.
Je dois renoncer à le diffuser, après tout au départ ce n'était qu'un exercice pour me perfectionner en shell
il me faudrait le reprendre dans un autre langage.

Merci encore à tous pour vos aides

Hors ligne

#20 Le 17/09/2022, à 21:03

Watael

Re : [RESOLU]Erreur execution script bash suite mise à jour distribution

ou changer/simplifier l'algo...

je le trouve surtout très bavard : il semble y avoir plus de lignes traitant des écritures de log que pour la recherche des doublons.

et je ne vois pas beaucoup d'intérêt à cette commande awk, qui (plus ou moins) fait un appel système pour exécuter un shell, alors qu'on est déjà dans un script shell, qui pourrait très bien effectuer la tâche attribuée à awk.
mon avis serait différent si c'était un script entièrement en awk.

Dernière modification par Watael (Le 18/09/2022, à 20:09)


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#21 Le 18/09/2022, à 20:06

philoeil

Re : [RESOLU]Erreur execution script bash suite mise à jour distribution

Bonjour,
Merci Watael,
Je code parceque cela me plait, que mes petites applications me rendent de menus services et c'est un hobby qui m'amuse,
je n'ai aucune formation informatique et ce n'est pas mon métier, d'où de grosses lacunes approximations et maladresses

Et comme dirait un de mes neveux je fais du code "spaghettis" c'est pas joli joli:lol:

Merci de votre patience et compréhension.

Hors ligne

#22 Le 18/09/2022, à 20:15

Watael

Re : [RESOLU]Erreur execution script bash suite mise à jour distribution

c'était surtout pour dire qu'il n'est pas nécessaire de passer à un autre langage.
je préfère un script qui fait l'essentiel : plus il y a d'à-côtés, plus il y a de risques de dysfonctionnements, qui ne sont pas liés au traitement souhaité.
quitte à débugger, je préfère encore débugger ce pourquoi j'ai codé le script que ses fonctions périphériques. smile

Dernière modification par Watael (Le 18/09/2022, à 20:16)


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#23 Le 19/09/2022, à 01:50

MicP

Re : [RESOLU]Erreur execution script bash suite mise à jour distribution

Bonjour

Dans son message #19, philoeil a écrit :

… comment identifier les commandes non builtin de mon script, cela m'apparait impossible …

Au niveau du script, il suffirait simplement de donner à la variable PATH une valeur nulle,
pour que plus aucune commande externe au bash ne puisse être accessible autrement qu'en spécifiant leur chemin absolu => il ne resterait alors accessibles que les commandes internes du bash

Il existe un manuel concernant les commande internes (builtins) du bash

man builtins

et bien sûr, il y a le manuel de l'interpréteur de commande bash

man bash

Hors ligne

#24 Le 19/09/2022, à 07:30

philoeil

Re : [RESOLU]Erreur execution script bash suite mise à jour distribution

Bonjour,
Merci Watael
et merci MicP pour l'info

Hors ligne

#25 Le 19/09/2022, à 15:31

LeoMajor

Re : [RESOLU]Erreur execution script bash suite mise à jour distribution

salut,
@philoeil
L'origine de ton problème est qu'il n'y a pas d'organisation de données, PAS DE TABLEAU avec le hash md5sum, ...et à la place des fichiers temporaires...
------------------

(detox est conseillé pour nettoyer les noms de fichiers ...)

:~/scripts$ cat bfdupes.bash

#!/bin/bash
shopt -s globstar
declare -A fs

affichage(){
for f in "${!fs[@]}"
do
if [[ "$f" =~ \.count ]] && [ "${fs[$f]}" -gt 1 ]; then
 ref=${f%.count}
 ((c++))
 echo -e "\n$c--------"
 echo -e "${fs[$ref.hash]}\t"count:"\t${fs[$ref.count]}"
 for ((i=1;i<="${fs[$f]}";i++))
  do echo -e "${fs[$ref.hash]}\t$i\t${fs[$ref.$i]}"
  done
fi
done
echo -e "\nNombre de fichiers scannés:\t${fs[files.total]}"
}

init() {
for f in ~/Images/**
do
test -d "$f" && continue
#test ! -s "$f" && continue    fichiers vides (touch)
((nb++))
h=$(cut -d\  -f1 < <(md5sum "$f"))
fs["$h.hash"]="$h"
test -z "${fs[$h.count]}" && m=0 || m=${fs["$h.count"]}
((m++))
fs["$h.count"]=$m
fs["$h.$m"]="$f"
fs["files.total"]=$nb
done
}

init
affichage

retourne par exemple

1--------
d41d8cd98f00b204e9800998ecf8427e	count:	4
d41d8cd98f00b204e9800998ecf8427e	1	/home/toto/Images/copie-null.png
d41d8cd98f00b204e9800998ecf8427e	2	/home/toto/Images/empty.png
d41d8cd98f00b204e9800998ecf8427e	3	/home/toto/Images/hello.txt
d41d8cd98f00b204e9800998ecf8427e	4	/home/toto/Images/vide.png

2--------
715da7dc611c143635bdd48fc8f07020	count:	2
715da7dc611c143635bdd48fc8f07020	1	/home/toto/Images/Capture_d_ecran_de_2022-02-10_11-33-16.png
715da7dc611c143635bdd48fc8f07020	2	/home/toto/Images/Capture_d_ecran_de_2022-02-10_11-33-18.png

3--------
dc9ce59b410f76055644707a34539341	count:	2
dc9ce59b410f76055644707a34539341	1	/home/toto/Images/new2.jpg
dc9ce59b410f76055644707a34539341	2	/home/toto/Images/new.png

4--------
91534006b7d15ec9968fa07e43d1ef3a	count:	2
91534006b7d15ec9968fa07e43d1ef3a	1	/home/toto/Images/Capture_d_ecran_de_2022-01-31_01-40-23.png
91534006b7d15ec9968fa07e43d1ef3a	2	/home/toto/Images/Capture_d_ecran_de_2022-01-31_01-40-28.png

5--------
4a2c38bfcf0b63689df5c521656fb3bf	count:	3
4a2c38bfcf0b63689df5c521656fb3bf	1	/home/toto/Images/copie-emilie.mp3
4a2c38bfcf0b63689df5c521656fb3bf	2	/home/toto/Images/emilie.mp3
4a2c38bfcf0b63689df5c521656fb3bf	3	/home/toto/Images/Emilie_Simon-Chanson_De_Toile-wr9i3LX-nas.mp3

Nombre de fichiers scannés:	761

variante gawk

#!/bin/gawk -f
# detox -r /dossier est conseillé pour sécuriser les noms de fichier (espaces, ...)
# shopt -s globstar
# gawk -f afdupes.awk ~/Musique/**
# (getline line < ARGV[i]) < 0   f + fichiers vides (touch ...)
# (getline line < ARGV[i]) <= 0  fichiers non vides

func excludedirname() {
for (i=1;i<ARGC;i++)
	{if ( (getline line < ARGV[i]) < 0 )
	{ if(debug==2)print "exclus:", ARGV[i], ERRNO
	delete ARGV[i]; d++ }
        close(ARGV[i]) }
if(debug==1)print "argc, delete, fichiers=argc-delete-1", ARGC, d, ARGC-d-1
cmax=ARGC-d-1
}
func real(f) { cmd="realpath " f; cmd|getline tmp; close(cmd); return tmp }
func md5(f) { cmd="md5sum " f; cmd|getline tmp; close(cmd); return tmp }

func affichage(array){
PROCINFO["sorted_in"] = "@ind_num_asc"
for (i in array)
if(!(i~/files\.nb/)&&(array[i]["count"]>1)){id++; print "\n",id,"---"
for (j in array[i])
print "+", j, array[i][j]
}

}

func doublons(array){
PROCINFO["sorted_in"] = "@ind_num_asc"
for (i in array)
if(!(i~/files\.nb/)&&(array[i]["count"]>1)){id++; print "\n",id,"---"
for (j in array[i]){
	if(j~/count|hash/)print j,array[i][j]
	else if(j==1)print "à garder", j, array[i][j]
	else if(j>1){print "à supprimer",j,array[i][j]
	#print del(array[i][j])
	}
}
}
}

func rdoublons(array, nokeep, keep){
#nokeep, keep: regex
PROCINFO["sorted_in"] = "@ind_num_asc"
for (i in array)
if(!(i~/files\.nb/)&&(array[i]["count"]>1)){id++; print "\n",id,"---"
for (j in array[i]){
        if(j~/count|hash/)print j,array[i][j]
        else if(array[i][j]~nokeep){print "à supprimer", j, array[i][j]
	#print del(array[i][j])
	}
        else if(array[i][j]~keep){print "à garder",j,array[i][j]
        }
}
}
}

func del(f) { cmd=system("rm " f); if(cmd==0){res="supression"}else{res="erreur rm"}; return f" "res }

BEGIN { debug=0; excludedirname() }
BEGINFILE {
if(FILENAME) {
	nb++
	if(debug==1)print "dbg", nb, FILENAME
	nf=split(md5(FILENAME),t," ")
	m=t[1]
	c[m]++
	fs[m]["hash"]=m
	fs[m]["count"]=c[m]
	fs[m][c[m]]=real(t[2])
	fs["files.nb"][""]=nb  # END { equivalent cmax 
	#print  fs[m]["count"],fs[m][c[m]],fs[m]["hash"]
}
}

END {

affichage(fs)
# simple affichage

#doublons(fs)
# le 1er est gardé, les autres détruits

#rdoublons(fs, ".*[Cc]opie.*", ".*")
# supprime les doublons au motif ".*[Cc]opie.*", le reste des doublons est gardé

print "\n","nombre de fichiers scannés:", fs["files.nb"][""]
}

Hors ligne