#1 Le 10/10/2019, à 20:44
- domi301
[resolu] maudit par les blancs
Salut à tous
j'ai d'un coté de nombreux dossiers "nom prenom" dont une bonne partie contiennent hélas plusieurs espaces au milieu
(c'est pas moi qui les ait créés...)
et de l'autre coté un tas de fichiers en vrac que j'essaie de ranger en semi-auto dans les dossiers
(il y a trop d'homonymes et de conflits potentiel genre berg et lackberg pour le faire en full-auto...)
je fais une première passe pour identifier les fichiers vrac éligibles au transfert ou je teste pour chaque dossier existant si il y aurait des fichiers à ranger dedans
NB: la finasserie sur lt 3 c'est pour ignorer les "de ", "mc ", "la "...
for vdossier in ???*
do
set $(echo $vdossier)
# vnom = $(eval echo $1)
vnom=$1
if [ ${#vnom} -lt 3 ]
then
vnom=$2
fi
find "./a trier/" -type f -iname "*$vnom*" -exec echo {} ":" $vdossier ":" \; > verif.csv
je charge verif.csv dans libre office pour trier ceux qui me semblent coherent a ranger puis je fais un fichier script pour le rangement a partir de
formule ="mv -b """ & $'tri'.A1 & """ ""./" & $'trif'.B1 & "/"""
et j'obtiens un résultat mv -b fichier ./dossier_cible/
ca fait le boulot grosso-modo SAUF pour les dossiers contenants plusieurs espaces ou j'obtiens des erreurs
mv: impossible de déplacer ... vers './McDermid Val/': N'est pas un dossier
effectivement le vrai dossier est "McDermid Val" avec 2 espaces...
prob 1
par quelle commande trouver et renommer les dossiers défectueux pour leur appliquer un trim et enlever les espaces excédentaires ?
j'arrive bien à les identifier par
find ./ -type d -maxdepth 1 -name "* *" -print
mais je coince sur la commande de renommage
prob 2
je ne comprends pas comment je perds les espaces du nom d'origine
je présume que ca à un lien avec le set $(echo $vdossier)
mais comment faire autrement ??
Dernière modification par domi301 (Le 16/10/2019, à 20:45)
Lubuntu / Xubuntu ==> redonner vie à des machines abandonnées
en cas de besoin => http://forum.ubuntu-fr.org/viewtopic.php?id=1069631
Hors ligne
#2 Le 10/10/2019, à 23:23
- kamaris
Re : [resolu] maudit par les blancs
Bon, je n'ai pas tout saisi à ce stade de la mécanique passant du premier script à libreoffice, puis de libreoffice au second script, mais concernant les espaces, je pense que ton problème vient de
find "./a trier/" -type f -iname "*$vnom*" -exec echo {} ":" $vdossier ":" \; > verif.csv
à remplacer par
find "./a trier/" -type f -iname "*$vnom*" -exec echo {} ": $vdossier :" \; > verif.csv
c'est à dire qu'il faut inclure la variable $vdossier dans les guillemets.
Tu peux par ailleurs remplacer
set $(echo $vdossier)
par
set $vdossier
Hors ligne
#3 Le 11/10/2019, à 17:03
- LeoMajor
Re : [resolu] maudit par les blancs
bonjour,
solution karcher
detox, inline-detox: paquet detox
~$ inline-detox <<<"éèçà@)(pierre martin+[123]"
eeca-pierre_martin+-123-
~$ touch /tmp/"éèçà@)(pierre martin+[123]"
~$ ls /tmp/éèçà@\)\(pierre\ martin+\[123\]
/tmp/éèçà@)(pierre martin+[123]
~$ detox /tmp/éèçà@\)\(pierre\ martin+\[123\]
~$ ls /tmp/eeca-pierre_martin+-123-
/tmp/eeca-pierre_martin+-123-
Hors ligne
#4 Le 11/10/2019, à 21:44
- domi301
Re : [resolu] maudit par les blancs
merci à vous
@LeoMajor, sympa le detox par rapport à des empilements de SED, je garde
@kamaris, le soucis venait bien du printf et des "
pour expliquer les 2 etapes je peux avoir de multiples combinaisons d'un même nom avec plusieurs prenoms ou d'un prenom qui sert de nom à d'autres...
d'ou l'obligation de passer par une étape manuelle pour valider les bonnes cibles de tri.
c'est les "survivants" que je traite ensuite par les mv (qq centaines quand même...)
exp pour un jeu d'essai de dossiers cibles potentielles
$ ll
drwxrwxr-x 2 phocas phocas 4096 oct. 11 22:05 'aaa 2bl'/
drwxrwxr-x 2 phocas phocas 4096 oct. 11 22:11 atrier/
drwxrwxr-x 2 phocas phocas 4096 oct. 11 22:13 'autre ccc'/
drwxrwxr-x 2 phocas phocas 4096 oct. 11 22:05 'bbb 1bl'/
drwxrwxr-x 2 phocas phocas 4096 oct. 11 22:12 'bbb 2eme'/
drwxrwxr-x 2 phocas phocas 4096 oct. 11 22:05 'ccc 3bl'/
c'est bien mon ancien find qui perd les espaces -exec echo {} ":" $vdossier ":" ${#vnom} \;
./atrier/machin aaa : aaa 2bl : 3
./atrier/bbb truc : bbb 1bl : 3
./atrier/bbb truc : bbb 2eme : 3
./atrier/et.ccc-hop : ccc 3bl : 3
mais le find de Kamaris lui conserve bien l'intégralité des noms de dossier avec -exec echo {} ":$vdossier:" ${#vnom} \;
./atrier/machin aaa :aaa 2bl: 3
./atrier/bbb truc :bbb 1bl: 3
./atrier/bbb truc :bbb 2eme: 3
./atrier/et.ccc-hop :ccc 3bl: 3
j'ai donc une solution mais je ne comprends pas trop pourquoi. Le man de echo ne parle pas d'un retraitement des espaces
c'est bien l'encapsulation entre " " qui sauve les espaces mais j'aimerai bien comprendre le pourquoi...
echo $vdossier "::$vdossier"
ccc 3bl ::ccc 3bl
Lubuntu / Xubuntu ==> redonner vie à des machines abandonnées
en cas de besoin => http://forum.ubuntu-fr.org/viewtopic.php?id=1069631
Hors ligne
#5 Le 11/10/2019, à 22:04
- Watael
Re : [resolu] maudit par les blancs
c'est lié au Découpage en mots
voir:
man -P "less -p '^\s+Word Splitting'" bash
Dernière modification par Watael (Le 11/10/2019, à 22:04)
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#6 Le 11/10/2019, à 22:31
- kamaris
Re : [resolu] maudit par les blancs
Oui, le shell opère sur le contenu des variables avant de passer le résultat à echo (ou à toute autre commande).
Tu peux t'en convaincre en utilisant la commande set -x, qui va te montrer ce qui est effectivement passé à echo quand tu fais echo $var ou echo "$var".
Il y a une description de ce comportement que j'aime bien dans le wiki de shellcheck : https://github.com/koalaman/shellcheck/wiki/SC2086
Je t'invite d'ailleurs à découvrir ce programme si tu ne le connais pas, et à lui passer ton script pour voir un peu ce qu'il a à t'apprendre
Hors ligne
#7 Le 16/10/2019, à 20:46
- domi301
Re : [resolu] maudit par les blancs
merci, je me suis couché moins bête...
Lubuntu / Xubuntu ==> redonner vie à des machines abandonnées
en cas de besoin => http://forum.ubuntu-fr.org/viewtopic.php?id=1069631
Hors ligne