#1 Le 29/10/2021, à 15:00
- Terminus78
[Résolu] Script parcours arborescence pour renommage
Bonjour à tous,
Je me permets de faire appel à votre aide car je galère un peu ...
Je souhaiterais créer un script me permettant de parcourir un dossier donné et ses sous-dossiers, dans le but de renommer tous les fichiers qu'ils trouvent disposant d'un caractère "+" dans son nom (à remplacer par un espace).
J'espère que je me suis bien expliqué ?
J'ai essayé ce bout de code mais sans résultat :
#où $1 correspond au répertoire de départ visé, entré en paramètre
for f in "$1"/*; do
mv $f ${f/+/ };
echo "$f"
done
Une idée ?
Merci à vous !
Dernière modification par Terminus78 (Le 18/11/2021, à 16:14)
Hors ligne
#2 Le 29/10/2021, à 16:08
- geole
Re : [Résolu] Script parcours arborescence pour renommage
Bonjour
Je te conseille de remplacer par un underscore plutôt qu'un espace
voir https://forum.ubuntu-fr.org/viewtopic.php?id=1183201
for f in *+*; do mv -v "$f" $(echo "$f" | tr '+' '_'); done
renommé 'Fic+Fac' -> 'Fic_Fac'
Dernière modification par geole (Le 30/10/2021, à 09:19)
Les grilles de l'installateur https://doc.ubuntu-fr.org/tutoriel/inst … _subiquity
"gedit admin:///etc/fstab" est proscrit, utilisez "pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY xdg-open /etc/fstab" Voir https://doc.ubuntu-fr.org/gedit
Les partitions EXT4 des disques externes => https://forum.ubuntu-fr.org/viewtopic.p … #p22697248
En ligne
#3 Le 29/10/2021, à 16:47
- Tawal
Re : [Résolu] Script parcours arborescence pour renommage
Hello,
Avec find et rename sans boucle :
find "$1" -type f -iname "*+*" -exec rename 's/\+/ /g' {} \;
Ou avec la boucle for et mv :
shopt -s nullglob globstar; for f in "$1"/**/*+*; do mv "$f" "${f//+/ }"; done
Essais :
$ touch f+f t+t g+g
$ ls -l
total 0
-rw-r--r-- 1 tawal tawal 0 29 oct. 17:46 f+f
-rw-r--r-- 1 tawal tawal 0 29 oct. 17:46 g+g
-rw-r--r-- 1 tawal tawal 0 29 oct. 17:46 t+t
$ find . -type f -iname "*+*" -exec rename 's/\+/ /g' {} \;
$ ls -l
total 0
-rw-r--r-- 1 tawal tawal 0 29 oct. 17:46 'f f'
-rw-r--r-- 1 tawal tawal 0 29 oct. 17:46 'g g'
-rw-r--r-- 1 tawal tawal 0 29 oct. 17:46 't t'
$ rm *
$ touch f+f t+t g+g
$ shopt -s nullglob globstar; for f in ./**/*+*; do mv "$f" "${f//+/ }"; done
$ ls -l
total 0
-rw-r--r-- 1 tawal tawal 0 29 oct. 17:46 'f f'
-rw-r--r-- 1 tawal tawal 0 29 oct. 17:46 'g g'
-rw-r--r-- 1 tawal tawal 0 29 oct. 17:46 't t'
$
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
#4 Le 29/10/2021, à 22:33
- kamaris
Re : [Résolu] Script parcours arborescence pour renommage
Puisque rename le permet, autant profiter de la version rapide pour le find :
find "$1" -type f -name '*+*' -exec rename 's/\+/ /g' {} +
Hors ligne
#5 Le 30/10/2021, à 09:16
- geole
Re : [Résolu] Script parcours arborescence pour renommage
Bonjour.
Il me semble que le logiciel rename sera à installé pour être utilisé.
sudo apt install rename
Puis pour faire plus simple
cd /répertoire de niveau supérieur à examiner
find . -type f -name '*+*' -exec rename -v 's/\+/_/g' {} +
Ajout. Du coup, tu n'as plus besoin de fabriquer un script qui va nécessiter de fournir un paramètre que tu pourrais mal orthographier. Avec la commande cd tu sais immédiatement que c'est bon.
Je te rappelle que mettre un espace dans un nom de fichier va compliquer son accès en ligne de commande.
Dernière modification par geole (Le 31/10/2021, à 16:55)
Les grilles de l'installateur https://doc.ubuntu-fr.org/tutoriel/inst … _subiquity
"gedit admin:///etc/fstab" est proscrit, utilisez "pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY xdg-open /etc/fstab" Voir https://doc.ubuntu-fr.org/gedit
Les partitions EXT4 des disques externes => https://forum.ubuntu-fr.org/viewtopic.p … #p22697248
En ligne
#6 Le 31/10/2021, à 15:50
- kamaris
Re : [Résolu] Script parcours arborescence pour renommage
Bof, c'est pas tellement plus simple et changer de répertoire dans un script est à éviter autant que possible (ou alors dans un sous shell quand c'est nécessaire).
Si le but est de simplifier l'affichage de rename, on peut faire :
find "$1" -type f -name '*+*' -execdir rename 's/\+/ /g' {} +
Hors ligne
#7 Le 02/11/2021, à 15:08
- Terminus78
Re : [Résolu] Script parcours arborescence pour renommage
Bonjour à tous et merci bcp pour vos retours.
J'ai essayé vos différentes solutions mais à chaque fois il ne se passe ... rien.
J'avoue que je ne comprends pas trop, pas de msg d'erreur, ni quoi que ce soit, juste rien du tout.
Une idée du problème ?
Hors ligne
#8 Le 02/11/2021, à 15:20
- geole
Re : [Résolu] Script parcours arborescence pour renommage
Bonjour
Poste le retour de ces deux commandes en mettant une vraie valeur dans le répertoire
cd /répertoire de niveau supérieur à examiner
find . -type f -name '*+*' -exec rename -v 's/\+/_/g' {} +
Si tu n'as aucune réponse, c'est que tout est bon.
Les autres commandes jugeaient inutile de t'informer des corrections exécutées
Dernière modification par geole (Le 02/11/2021, à 15:22)
Les grilles de l'installateur https://doc.ubuntu-fr.org/tutoriel/inst … _subiquity
"gedit admin:///etc/fstab" est proscrit, utilisez "pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY xdg-open /etc/fstab" Voir https://doc.ubuntu-fr.org/gedit
Les partitions EXT4 des disques externes => https://forum.ubuntu-fr.org/viewtopic.p … #p22697248
En ligne
#9 Le 02/11/2021, à 17:33
- Terminus78
Re : [Résolu] Script parcours arborescence pour renommage
Mea culpa, enfaite ce bout de script fonctionne parfaitement :
shopt -s nullglob globstar; for f in "$1"/**/*+*; do mv "$f" "${f//+/ }"; done
Merci encore
Cependant j'ai désormais un autre soucis, j'essaie ceci :
for f in "$1"/**/*; do
mv "$f" "${f//LM*--original--/}";
done
J'ai plusieurs fichiers qui commencent par LM*--original-- (où * est une suite de caractère, un peu comme un ID) et j'aimerais tout simplement supprimer ce début de nom de fichier.
Cependant, en faisant ceci, mon bout de script range mes fichiers dans le dossier supérieur ... Une idée ?
Hors ligne
#10 Le 02/11/2021, à 17:36
- Watael
Re : [Résolu] Script parcours arborescence pour renommage
tu dois d'abord récupérer le nom du répertoire et le nom du fichier séparément : tout ce qui est avant le dernier / et tout ce qui est après le dernier /.
cf. man bash /Remplacement de paramètres
Dernière modification par Watael (Le 02/11/2021, à 17:37)
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#11 Le 04/11/2021, à 15:09
- Terminus78
Re : [Résolu] Script parcours arborescence pour renommage
Bonjour,
Désolé mais je n'ai pas saisi la notion.
De plus, je ne comprends pas pourquoi ca, ça marche :
for f in "$1"/**/*+*; do
mv "$f" "${f//+/ }";
done
Et cela non :
for f in "$1"/**/*; do
mv "$f" "${f//LM*--original--/}";
done
Hors ligne
#12 Le 04/11/2021, à 15:52
- Watael
Re : [Résolu] Script parcours arborescence pour renommage
montre-nous des \ls -1 :
- avant suppression des +
- après suppression des +
qu'on voit à quoi ressemblent les noms des fichiers.
EDIT :
c'est les mêmes fichiers ? alors, pourquoi deux boucles ?
shopt est positionné de la même manière ?
Dernière modification par Watael (Le 04/11/2021, à 16:04)
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#13 Le 04/11/2021, à 16:46
- Terminus78
Re : [Résolu] Script parcours arborescence pour renommage
@Watael :
Voici le répertoire d'origine on va dire :
user1@grp1:...8cas1/G05R00C00/talend/consolidation/TEST/SendTest/2021_11_02-16h_19_test $ ls -1
Original
Generated
LM706561
LM706595
LM711990
LM711991
LM714536
LM714537
LM714538
LM719281
LM719940
LM720472
LM720567
LM721725
XML_2021-11-02.xml
Ce que je souhaite du coup c'est que mon script parcours tous les dossiers (et leurs sous-dossiers) ici présent.
Je vais prendre du coup l'exemple du dossier LM706561 :
user1@grp1:...8cas1/G05R00C00/talend/consolidation/TEST/SendTest/2021_11_02-16h_19_test/LM706561 $ ls -1
Original
Generated
LM706561--original--TV+and+web+marketing+intelligence+-+Nov+2021.xlsx
Tous les dossiers sont composés de la même façon, les fichiers débutant par *original* se rangent à la racine, et les *generated* dans le dossier /Generated.
Du coup mon script et censé faire une passe sur ce dossier, modifier le nom du fichier (il devrait donc s’appeler : TV and web marketing intelligence - Nov 2021.xlsx et surtout rester à cet endroit), et faire une passe dans les sous-dossiers original et generated, et effectuer la même chose (au cas où il y a une coquille et aussi car j'améliorais aussi mon script après pour faire le même travail sur les fichiers débutant par LM*generated* ...
Donc tout ca c'était avant la suppression des +.
Après la suppression des + (si je n'ajoute pas la boucle pour le renommage des LM*original*) : C'est simple, mes fichiers sont bien renommés, les + sont retirés et les fichiers n'ont pas sauté de repertoires.
Maintenant si j'ajoute la boucle pour le renommage des LM*original* : Mes fichiers sont bien renommés, mais ce retrouve un cran au dessus au niveau de mon arborescence.
EDIT : La deuxième boucle est en effet inutile en soit, c'était pour des tests mais à terme tout sera rangé dans la même boucle tant qu'à faire
Dernière modification par Terminus78 (Le 04/11/2021, à 16:47)
Hors ligne
#14 Le 04/11/2021, à 17:13
- Watael
Re : [Résolu] Script parcours arborescence pour renommage
$ set -- /tmp
$ >"$1/LM706561--original--TV+and+web+marketing+intelligence+-+Nov+2021.xlsx"
$ ls "$1"/LM*
/tmp/LM706561--original--TV+and+web+marketing+intelligence+-+Nov+2021.xlsx
$ for f in "$1"/*+*; do sansPlus="${f//+/ }"; mv "$f" "$sansPlus"; mv "$sansPlus" "${sansPlus//LM*--original--}"; done
$ ls "$1"/TV*
'/tmp/TV and web marketing intelligence - Nov 2021.xlsx'
$
Dernière modification par Watael (Le 09/11/2021, à 14:35)
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#15 Le 09/11/2021, à 14:27
- Terminus78
Re : [Résolu] Script parcours arborescence pour renommage
Désolé pour mon retour tardif.
@Watael, merci de ton retour. J'ai essayé ta solution, plus de message d'erreur mais de mon côté il ne se passe rien du tout ...
Voici mon bout de code pour récapitulatif :
#!/bin/bash
shopt -s nullglob globstar;
for f in "$1"/*+*; do
sansPlus="${f//+/ }";
mv "$f" "$sansPlus";
mv "$sansPlus" "${sansPlus//LM*--original--}";
done
EDIT : Quand je commence ma boucle comme ceci, ils me remet les fichiers à la racine de mon répertoire :
for f in "$1"/**/*+*; do
Dernière modification par Terminus78 (Le 09/11/2021, à 14:34)
Hors ligne
#16 Le 09/11/2021, à 14:38
- Watael
Re : [Résolu] Script parcours arborescence pour renommage
je montrais un exemple, vite fait, dans le répertoire courant uniquement.
bien sûr, si tu veux descendre dans les sous-répertoires, il faut remettre le double astérisque.
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#17 Le 09/11/2021, à 15:14
- Terminus78
Re : [Résolu] Script parcours arborescence pour renommage
Okok, mais du coup j'ai toujours le même soucis
A savoir que j'aimerais qu'il modifie les noms de mes fichiers sans avoir à les retrouver à la racine, mais bien à l'endroit où ils étaient de base...
Une idée pour ce problème ?
Hors ligne
#18 Le 09/11/2021, à 15:33
- Watael
Re : [Résolu] Script parcours arborescence pour renommage
ça ne devrait pas faire ça : le second mv enlève seulement la partie LM...--original--
tu peux ajouter un echo devant les mv, et nous montrer la sortie, stp ?
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#19 Le 09/11/2021, à 15:57
- Terminus78
Re : [Résolu] Script parcours arborescence pour renommage
test
/opt/application/98cas1/G05R00C00/talend/consolidation/TEST/SendTest/2021_11_02-16h_19_test/LM706561/LM706561--original--TV and Online Intelligence Database - November 2021.xlsx
test
/opt/application/98cas1/G05R00C00/talend/consolidation/TEST/SendTest/2021_11_02-16h_19_test/LM706595/LM706595--original--TV Media Intelligence Database - November 2021.xlsx
test
/opt/application/98cas1/G05R00C00/talend/consolidation/TEST/SendTest/2021_11_02-16h_19_test/LM711990/LM711990--original--World Television Information Service Forecasting Tool - November 2021.xlsx
test
/opt/application/98cas1/G05R00C00/talend/consolidation/TEST/SendTest/2021_11_02-16h_19_test/LM711991/LM711991--original--World Television Information Service Data Sheets - November 2021.xlsx
test
/opt/application/98cas1/G05R00C00/talend/consolidation/TEST/SendTest/2021_11_02-16h_19_test/LM714536/LM714536--original--Home Entertainment Intelligence Database - November 2021.xlsx
test
/opt/application/98cas1/G05R00C00/talend/consolidation/TEST/SendTest/2021_11_02-16h_19_test/LM714537/LM714537--original--Online Video Intelligence Database - November 2021.xlsx
test
/opt/application/98cas1/G05R00C00/talend/consolidation/TEST/SendTest/2021_11_02-16h_19_test/LM714538/LM714538--original--TV and Online Video Analyst Handbook - November 2021.xlsx
test
/opt/application/98cas1/G05R00C00/talend/consolidation/TEST/SendTest/2021_11_02-16h_19_test/LM719281/LM719281--original--2022 Trends to Watch The Indian OTT and Pay-TV Market PDF.pdf
test
/opt/application/98cas1/G05R00C00/talend/consolidation/TEST/SendTest/2021_11_02-16h_19_test/LM719281/LM719281--original--2022 Trends to Watch The Indian OTT and Pay-TV Market.pptx
test
/opt/application/98cas1/G05R00C00/talend/consolidation/TEST/SendTest/2021_11_02-16h_19_test/LM720472/LM720472--original--Enterprise Network Services Insights Survey 2021 PDF.pdf
test
/opt/application/98cas1/G05R00C00/talend/consolidation/TEST/SendTest/2021_11_02-16h_19_test/LM720472/LM720472--original--Enterprise Network Services Insights Survey 2021.pptx
test
/opt/application/98cas1/G05R00C00/talend/consolidation/TEST/SendTest/2021_11_02-16h_19_test/LM720567/LM720567--original--2022 Trends to Watch Broadband PDF.pdf
test
/opt/application/98cas1/G05R00C00/talend/consolidation/TEST/SendTest/2021_11_02-16h_19_test/LM720567/LM720567--original--2022 Trends to Watch Broadband PPT.pptx
j'ai mis echo test et echo $sansPlus, juste avant les mv
Dernière modification par Terminus78 (Le 09/11/2021, à 15:58)
Hors ligne
#20 Le 09/11/2021, à 16:25
- Watael
Re : [Résolu] Script parcours arborescence pour renommage
non, il faut qu'on voit les arguments que reçoit mv
j'ai dit "devant", pas "avant".
Dernière modification par Watael (Le 09/11/2021, à 16:26)
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#21 Le 09/11/2021, à 16:34
- Terminus78
Re : [Résolu] Script parcours arborescence pour renommage
Ah ! Sorry. Juste devant les mv du coup ?
Comme ça ? :
for f in "$1"/*/*+*; do
sansPlus="${f//+/ }";
echo mv "$f" "$sansPlus";
echo mv "$sansPlus" "${sansPlus//LM*--original--}";
done
Ca me donne ceci (extrait car c'est un peu long) :
mv /opt/application/98cas1/G05R00C00/talend/consolidation/TEST/SendTest/2021_11_02-16h_19_test/LM706561/LM706561--original--TV+and+Online+Intelligence+Database+-+November+2021.xlsx /opt/application/98cas1/G05R00C00/talend/consolidation/TEST/SendTest/2021_11_02-16h_19_test/LM706561/LM706561--original--TV and Online Intelligence Database - November 2021.xlsx
mv /opt/application/98cas1/G05R00C00/talend/consolidation/TEST/SendTest/2021_11_02-16h_19_test/LM706561/LM706561--original--TV and Online Intelligence Database - November 2021.xlsx /opt/application/98cas1/G05R00C00/talend/consolidation/TEST/SendTest/2021_11_02-16h_19_test/TV and Online Intelligence Database - November 2021.xlsx
mv /opt/application/98cas1/G05R00C00/talend/consolidation/TEST/SendTest/2021_11_02-16h_19_test/LM706595/LM706595--original--TV+Media+Intelligence+Database+-+November+2021.xlsx /opt/application/98cas1/G05R00C00/talend/consolidation/TEST/SendTest/2021_11_02-16h_19_test/LM706595/LM706595--original--TV Media Intelligence Database - November 2021.xlsx
mv /opt/application/98cas1/G05R00C00/talend/consolidation/TEST/SendTest/2021_11_02-16h_19_test/LM706595/LM706595--original--TV Media Intelligence Database - November 2021.xlsx /opt/application/98cas1/G05R00C00/talend/consolidation/TEST/SendTest/2021_11_02-16h_19_test/TV Media Intelligence Database - November 2021.xlsx
mv /opt/application/98cas1/G05R00C00/talend/consolidation/TEST/SendTest/2021_11_02-16h_19_test/LM711990/LM711990--original--World+Television+Information+Service+Forecasting+Tool+-+November+2021.xlsx /opt/application/98cas1/G05R00C00/talend/consolidation/TEST/SendTest/2021_11_02-16h_19_test/LM711990/LM711990--original--World Television Information Service Forecasting Tool - November 2021.xlsx
mv /opt/application/98cas1/G05R00C00/talend/consolidation/TEST/SendTest/2021_11_02-16h_19_test/LM711990/LM711990--original--World Television Information Service Forecasting Tool - November 2021.xlsx /opt/application/98cas1/G05R00C00/talend/consolidation/TEST/SendTest/2021_11_02-16h_19_test/World Television Information Service Forecasting Tool - November 2021.xlsx
Hors ligne
#22 Le 09/11/2021, à 16:43
- Watael
Re : [Résolu] Script parcours arborescence pour renommage
ben ? c'est bon, non ?
/opt/application/98cas1/G05R00C00/talend/consolidation/TEST/SendTest/2021_11_02-16h_19_test/LM711990/LM711990--original--World Television Information Service Forecasting Tool - November 2021.xlsx
/opt/application/98cas1/G05R00C00/talend/consolidation/TEST/SendTest/2021_11_02-16h_19_test/World Television Information Service Forecasting Tool - November 2021.xlsx
qu'est-ce qui ne va pas ?
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#23 Le 10/11/2021, à 00:30
- Terminus78
Re : [Résolu] Script parcours arborescence pour renommage
Bah enfaite, en même temps que le renommage, ça prend mes fichiers qui sont dans les sous-répertoires, et ça les remonte d'un cran, sous le répertoire d'origine. Alors que je souhaiterais qu'ils restent dans leurs dossiers respectifs.
Hors ligne
#24 Le 10/11/2021, à 02:39
- Watael
Re : [Résolu] Script parcours arborescence pour renommage
j'ai compris : ça supprime l'expression depuis le premier LM jusqu'à --original-- dans la totalité de la variable, y compris le nom du répertoire.
comme je l'avais dit une solution serait d'isoler le nom du répertoire (jusqu'au dernier /) et le nom du fichier (à partir du dernier /), et de ne supprimer l'expression que dans le nom du fichier.
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#25 Le 10/11/2021, à 02:49
- MicP
Re : [Résolu] Script parcours arborescence pour renommage
Bonjour
…ça prend mes fichiers qui sont dans les sous-répertoires, et ça les remonte d'un cran, sous le répertoire d'origine. Alors que je souhaiterais qu'ils restent dans leurs dossiers respectifs.…
EDIT : Par défaut, l'option extglob est activée,
sinon il faudra l'activer pour que le script fonctionne.
Essaye avec ça :
for f in "$1"/*/*+*; do
chemin="${f%/*}"
nomFich="${f##*/}"
sansPlus="${nomFich//+/ }"
sansLM="${sansPlus//LM+([[:digit:]])--original--}"
echo mv "$f" "$chemin/$sansLM"
done
Edit : J'avais mal formulé l'assignation de la valeur à la variable nommée sansLM
C'est corrigé maintenant.
Dernière modification par MicP (Le 19/11/2021, à 13:39)
Hors ligne