#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 ?!
--
* ce qui ne coïncide pas nécessairement avec le nombre des fichiers !
Connected \o/
Welcome to sHell. · eval is evil.
En 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.
En 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.
En 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.
En 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 ?
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.
En 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
ç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.
En 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.
En 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.
Dernière modification par Watael (Le 18/09/2022, à 20:16)
Connected \o/
Welcome to sHell. · eval is evil.
En ligne
#23 Le 19/09/2022, à 01:50
- MicP
Re : [RESOLU]Erreur execution script bash suite mise à jour distribution
Bonjour
… 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