Dans un répertoire j'ai un grand nombre de sous-répertoires
nommés "AA BB" ou "AA BB CC" (donc avec une ou plusieurs espaces)
que j'aimerais renommer "BB AA" ou "BB CC AA". Certains se
nomment juste "AA" et resteraient inchangés.
Mon premier outil envisagé est bash, mais sans exclusivité,
je connais (très mal) python.
En bash, comment simplement manipuler des chaÍ®nes et repérer
les séparateurs ?
Vous l'aurez compris, ce sont ici des répertoires "prénom nom".
Mais ça pourrait être bien autre chose ;)
--
ma céramique : http://didierdescamps.fr
autres bouts de vie : http://didierdescamps.free.fr
--
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Olivier Miakinen
Bonjour, Le 22/05/2022 23:59, Didier a écrit :
Dans un répertoire j'ai un grand nombre de sous-répertoires nommés "AA BB" ou "AA BB CC" (donc avec une ou plusieurs espaces)
Il est généralement considéré comme une mauvaise pratique de mettre des espaces dans les noms de fichiers ou de répertoires, en tout cas lorsqu'on veut pouvoir les manipuler ensuite en ligne de commande. Cela dit, rien ne l'interdit, c'est juste plus compliqué Í manipuler.
que j'aimerais renommer "BB AA" ou "BB CC AA". Certains se nomment juste "AA" et resteraient inchangés.
Tout dépend si c'est une manip que tu auras Í faire régulièrement, ou bien si c'est juste Í faire une seule fois, parce que tu t'es rendu compte que tu as mal nommé tes répertoires mais qu'ensuite tu n'y toucheras plus. Si c'est le second cas, je ne m'embêterais pas avec un programme bash, j'utiliserais un script manipulé dans vim. Voici d'abord mon jeu de tests : $ mkdir 'A" "AA" "A b" "A b c" "AA bb" "AA bb cc" "AAA bbb" "AAA bbb ccc" $ ls -1d * A AA 'AAA bbb' 'AAA bbb ccc' 'AA bb' 'AA bb cc' 'A b' 'A b c' D'abord je mets tous les noms avec espace dans un fichier : $ ls -1d *" "* > moveit Puis dans vim je fais : :%s/([^ ]*) (.*)/mv "&" "2 1"/ Le contenu de moveit devient alors : mv "AAA bbb" "bbb AAA" mv "AAA bbb ccc" "bbb ccc AAA" mv "AA bb" "bb AA" mv "AA bb cc" "bb cc AA" mv "A b" "b A" mv "A b c" "b c A" Et il suffit d'exécuter le script : $ sh moveit $ ls -1d * A AA 'b A' 'bb AA' 'bbb AAA' 'bbb ccc AAA' 'bb cc AA' 'b c A' moveit $ rm moveit -- Olivier Miakinen
Bonjour,
Le 22/05/2022 23:59, Didier a écrit :
Dans un répertoire j'ai un grand nombre de sous-répertoires
nommés "AA BB" ou "AA BB CC" (donc avec une ou plusieurs espaces)
Il est généralement considéré comme une mauvaise pratique de mettre
des espaces dans les noms de fichiers ou de répertoires, en tout cas
lorsqu'on veut pouvoir les manipuler ensuite en ligne de commande.
Cela dit, rien ne l'interdit, c'est juste plus compliqué Í manipuler.
que j'aimerais renommer "BB AA" ou "BB CC AA". Certains se
nomment juste "AA" et resteraient inchangés.
Tout dépend si c'est une manip que tu auras Í faire régulièrement, ou
bien si c'est juste Í faire une seule fois, parce que tu t'es rendu
compte que tu as mal nommé tes répertoires mais qu'ensuite tu n'y
toucheras plus.
Si c'est le second cas, je ne m'embêterais pas avec un programme bash,
j'utiliserais un script manipulé dans vim.
Voici d'abord mon jeu de tests :
$ mkdir 'A" "AA" "A b" "A b c" "AA bb" "AA bb cc" "AAA bbb" "AAA bbb ccc"
$ ls -1d *
A
AA
'AAA bbb'
'AAA bbb ccc'
'AA bb'
'AA bb cc'
'A b'
'A b c'
D'abord je mets tous les noms avec espace dans un fichier :
$ ls -1d *" "* > moveit
Puis dans vim je fais :
:%s/([^ ]*) (.*)/mv "&" "2 1"/
Le contenu de moveit devient alors :
mv "AAA bbb" "bbb AAA"
mv "AAA bbb ccc" "bbb ccc AAA"
mv "AA bb" "bb AA"
mv "AA bb cc" "bb cc AA"
mv "A b" "b A"
mv "A b c" "b c A"
Et il suffit d'exécuter le script :
$ sh moveit
$ ls -1d *
A
AA
'b A'
'bb AA'
'bbb AAA'
'bbb ccc AAA'
'bb cc AA'
'b c A'
moveit
Dans un répertoire j'ai un grand nombre de sous-répertoires nommés "AA BB" ou "AA BB CC" (donc avec une ou plusieurs espaces)
Il est généralement considéré comme une mauvaise pratique de mettre des espaces dans les noms de fichiers ou de répertoires, en tout cas lorsqu'on veut pouvoir les manipuler ensuite en ligne de commande. Cela dit, rien ne l'interdit, c'est juste plus compliqué Í manipuler.
que j'aimerais renommer "BB AA" ou "BB CC AA". Certains se nomment juste "AA" et resteraient inchangés.
Tout dépend si c'est une manip que tu auras Í faire régulièrement, ou bien si c'est juste Í faire une seule fois, parce que tu t'es rendu compte que tu as mal nommé tes répertoires mais qu'ensuite tu n'y toucheras plus. Si c'est le second cas, je ne m'embêterais pas avec un programme bash, j'utiliserais un script manipulé dans vim. Voici d'abord mon jeu de tests : $ mkdir 'A" "AA" "A b" "A b c" "AA bb" "AA bb cc" "AAA bbb" "AAA bbb ccc" $ ls -1d * A AA 'AAA bbb' 'AAA bbb ccc' 'AA bb' 'AA bb cc' 'A b' 'A b c' D'abord je mets tous les noms avec espace dans un fichier : $ ls -1d *" "* > moveit Puis dans vim je fais : :%s/([^ ]*) (.*)/mv "&" "2 1"/ Le contenu de moveit devient alors : mv "AAA bbb" "bbb AAA" mv "AAA bbb ccc" "bbb ccc AAA" mv "AA bb" "bb AA" mv "AA bb cc" "bb cc AA" mv "A b" "b A" mv "A b c" "b c A" Et il suffit d'exécuter le script : $ sh moveit $ ls -1d * A AA 'b A' 'bb AA' 'bbb AAA' 'bbb ccc AAA' 'bb cc AA' 'b c A' moveit $ rm moveit -- Olivier Miakinen
Olivier Miakinen
Le 23/05/2022 00:38, j'écrivais :
[une méthode compliquée]
Il y a beaucoup plus simple : $ ls -1d * A AA 'AAA bbb' 'AAA bbb ccc' 'AA bb' 'AA bb cc' 'A b' 'A b c' $ rename 's/([^ ]*) (.*)/$2 $1/' *" "* $ ls -1d * A AA 'b A' 'bb AA' 'bbb AAA' 'bbb ccc AAA' 'bb cc AA' 'b c A' -- Olivier Miakinen
Le 23/05/2022 00:38, j'écrivais :
[une méthode compliquée]
Il y a beaucoup plus simple :
$ ls -1d *
A
AA
'AAA bbb'
'AAA bbb ccc'
'AA bb'
'AA bb cc'
'A b'
'A b c'
$ rename 's/([^ ]*) (.*)/$2 $1/' *" "*
$ ls -1d *
A
AA
'b A'
'bb AA'
'bbb AAA'
'bbb ccc AAA'
'bb cc AA'
'b c A'
Il y a beaucoup plus simple : $ ls -1d * A AA 'AAA bbb' 'AAA bbb ccc' 'AA bb' 'AA bb cc' 'A b' 'A b c' $ rename 's/([^ ]*) (.*)/$2 $1/' *" "* $ ls -1d * A AA 'b A' 'bb AA' 'bbb AAA' 'bbb ccc AAA' 'bb cc AA' 'b c A' -- Olivier Miakinen
Sergio
Le 22/05/2022 Í 23:59, Didier a écrit :
Bonsoir la Libre Foule, Dans un répertoire j'ai un grand nombre de sous-répertoires nommés "AA BB" ou "AA BB CC" (donc avec une ou plusieurs espaces) que j'aimerais renommer "BB AA" ou "BB CC AA". Certains se nomment juste "AA" et resteraient inchangés. Mon premier outil envisagé est bash, mais sans exclusivité, je connais (très mal) python. En bash, comment simplement manipuler des chaÍ®nes et repérer les séparateurs ? Vous l'aurez compris, ce sont ici des répertoires "prénom nom". Mais ça pourrait être bien autre chose ;)
Fait un tour du cÍ´té de la commande "rename"... pour repérer les espaces entoure les de " ou échappe-les avec un . renane 's/ //' -- Serge http://cahierdesergio.free.fr/ Soutenez le libre: http://www.framasoft.org
Le 22/05/2022 Í 23:59, Didier a écrit :
Bonsoir la Libre Foule,
Dans un répertoire j'ai un grand nombre de sous-répertoires
nommés "AA BB" ou "AA BB CC" (donc avec une ou plusieurs espaces)
que j'aimerais renommer "BB AA" ou "BB CC AA". Certains se
nomment juste "AA" et resteraient inchangés.
Mon premier outil envisagé est bash, mais sans exclusivité,
je connais (très mal) python.
En bash, comment simplement manipuler des chaÍ®nes et repérer
les séparateurs ?
Vous l'aurez compris, ce sont ici des répertoires "prénom nom".
Mais ça pourrait être bien autre chose ;)
Fait un tour du cÍ´té de la commande "rename"... pour repérer les espaces entoure les de " ou échappe-les avec un .
renane 's/ //'
--
Serge http://cahierdesergio.free.fr/
Soutenez le libre: http://www.framasoft.org
Bonsoir la Libre Foule, Dans un répertoire j'ai un grand nombre de sous-répertoires nommés "AA BB" ou "AA BB CC" (donc avec une ou plusieurs espaces) que j'aimerais renommer "BB AA" ou "BB CC AA". Certains se nomment juste "AA" et resteraient inchangés. Mon premier outil envisagé est bash, mais sans exclusivité, je connais (très mal) python. En bash, comment simplement manipuler des chaÍ®nes et repérer les séparateurs ? Vous l'aurez compris, ce sont ici des répertoires "prénom nom". Mais ça pourrait être bien autre chose ;)
Fait un tour du cÍ´té de la commande "rename"... pour repérer les espaces entoure les de " ou échappe-les avec un . renane 's/ //' -- Serge http://cahierdesergio.free.fr/ Soutenez le libre: http://www.framasoft.org
Jacques L'helgoualc'h
Le 23-05-2022, Sergio a écrit :
Le 22/05/2022 Í 23:59, Didier a écrit :
Bonsoir la Libre Foule,
Bonjour, [...]
Fait un tour du cÍ´té de la commande "rename"... pour repérer les espaces entoure les de " ou échappe-les avec un . renane 's/ //'
au lieu de supprimer, je préfère remplacer les espaces consécutifs par un tiret bas : rename -d 's/s+/_/g' /chemin/intact/"noms affligés de blancs divers" => /chemin/intact/"noms_affligés_de_blancs_divers" (si on parle bien du rename Perl). Le s+ avalera plus ou moins les pires mélanges d'espaces, tabs, etc. --- sauf l'insécable : $ printf 'inséc able tt t z' |perl -e 'while(<>){s/s+/_/g;print $_,"n"}' inséc able_z Pour les « prénoms noms », je me méfierais des prénoms composés, noms doubles et autres aristocrates... Pour le tri alphabétique, il peut être commode de remplacer « prénom(s) nom Í tiroir » par « Tiroir, tout le reste », rename -d 's/^(.*S)s+(S+)$/$2, $1/;s/s+/_/g;s/_+$//' mais il restera des exceptions comme « Henry Ford III » ou « Alexandre Dumas fils » :/
Le 23-05-2022, Sergio a écrit :
Le 22/05/2022 Í 23:59, Didier a écrit :
Bonsoir la Libre Foule,
Bonjour,
[...]
Fait un tour du cÍ´té de la commande "rename"... pour repérer les
espaces entoure les de " ou échappe-les avec un .
renane 's/ //'
au lieu de supprimer, je préfère remplacer les espaces consécutifs par un tiret bas :
rename -d 's/s+/_/g' /chemin/intact/"noms affligés de blancs divers"
Fait un tour du cÍ´té de la commande "rename"... pour repérer les espaces entoure les de " ou échappe-les avec un . renane 's/ //'
au lieu de supprimer, je préfère remplacer les espaces consécutifs par un tiret bas : rename -d 's/s+/_/g' /chemin/intact/"noms affligés de blancs divers" => /chemin/intact/"noms_affligés_de_blancs_divers" (si on parle bien du rename Perl). Le s+ avalera plus ou moins les pires mélanges d'espaces, tabs, etc. --- sauf l'insécable : $ printf 'inséc able tt t z' |perl -e 'while(<>){s/s+/_/g;print $_,"n"}' inséc able_z Pour les « prénoms noms », je me méfierais des prénoms composés, noms doubles et autres aristocrates... Pour le tri alphabétique, il peut être commode de remplacer « prénom(s) nom Í tiroir » par « Tiroir, tout le reste », rename -d 's/^(.*S)s+(S+)$/$2, $1/;s/s+/_/g;s/_+$//' mais il restera des exceptions comme « Henry Ford III » ou « Alexandre Dumas fils » :/
Didier
Le 23/05/2022 Í 00:51, Olivier Miakinen a écrit :
Comme dit Jacques, certains noms improbables sont maltraités, mais c'est une toute petite minorité. Didier. -- ma céramique : http://didierdescamps.fr autres bouts de vie : http://didierdescamps.free.fr --
Le 23/05/2022 Í 00:51, Olivier Miakinen a écrit :
Comme dit Jacques, certains noms improbables sont maltraités, mais c'est une toute petite minorité. Didier. -- ma céramique : http://didierdescamps.fr autres bouts de vie : http://didierdescamps.free.fr --