Rechercher : dans
Par :

Substitution de caractères ... !

Dernière réponse le 25 avr 2008 à 20:09:12 touchepasaugrisbi, le 25 avr 2008 à 11:52:37 
 Signaler ce message aux modérateurs

Bonjour aux linuxiens,

Je cherche à substituer le caractère ' ' (space) par '_' (underscore) dans des noms de fichier et de répertoire (en parcourant une arborescence descendante)...

Voici mon script :

#############
remplace() {
     for z in $(ls)
     do
          if test -d $z
          then
               rep=`echo "$z" | sed 'y/ /_/'`; mv ${z} $rep; cd $rep; remplace; cd ..
          else
               nom=`echo "$z" | sed 'y/ /_/'`; mv ${z} $nom
          fi
     done
}

remplace
#############


Le parcours de l'arborescence se déroule correctement. Par contre, rien sur la substitution...

Quelqu'un(e) a une idée ?

Merci d'avance et bonne journée !!!
Configuration: Linux
Firefox 2.0.0.14

Meilleures réponses pour « Substitution de caractères ... ! » dans :
On peut utiliser comme on veut les polices de caractères VoirMythe On peut utiliser comme on veut les polices de caractères (TrueType, TTF...) Réalité FAUX. Explications Non, vous ne pouvez pas. Comme tout travail d'artiste, l'auteur d'une police de caractères doit être rémunéré pour son travail. C'est...
Utiliser des accents et autres caractères spéciaux VoirDans la plupart des langages de programmation, on ne peut utiliser directement les accents et autres caractères non-anglosaxon. La solution est l'unicode, une sorte de code universel. Par exemple pour afficher la chaine de caractères : " là, ça...
Caractère crochet sous Mac VoirIl n'y a pas le caractère crochet [ ] sur le clavier Mac... Bien embêtant pour poster des liens sur CCM. Néanmoins, il est possible de saisir ce caractère en utilisant la combinaison suivante : Pour [ : Alt + Maj + ( Pour ] : Alt + Maj + )
Caractères spéciaux HTML VoirCodage des caractères spéciaux Le standard HTML demande de respecter le codage des caractères ASCII 7 bits, c'est-à-dire que les caractères accentués ne sont pas autorisés. Il faut pour cela utiliser un codage particulier. Pour...
LaTeX - Table de caractères VoirSymboles mathématiques Symboles fléchés Lettres grecques Note : certains caractères n'apparaissent pas sous certains navigateurs (notamment certaines versions de Internet Explorer), ils sont remplacés par un carré, la...
Les chaînes de caractères en C++ VoirQu'est-ce qu'une chaîne de caractères ? Une chaîne de caractères (appelée string en anglais) est une suite de caractères, c'est-à-dire un ensemble de symboles faisant partie du jeu de caractères, défini par le code ASCII. En langage C++, une...

1

jipicy, le 25 avr 2008 à 13:14:50
  • +1

Salut,

Tiens voilà une solution vite fait et à adapter :

# arborescence

[tmpfs]$ tree
.
|-- mon rep1
|   |-- mon fichier1.txt
|   |-- mon fichier2.txt
|   |-- mon fichier3.txt
|   |-- mon fichier4.txt
|   `-- mon fichier5.txt
|-- mon rep2
|   |-- mon fichier1.txt
|   |-- mon fichier2.txt
|   |-- mon fichier3.txt
|   |-- mon fichier4.txt
|   `-- mon fichier5.txt
`-- mon rep3
    |-- mon fichier1.txt
    |-- mon fichier2.txt
    |-- mon fichier3.txt
    |-- mon fichier4.txt
    `-- mon fichier5.txt

3 directories, 15 files

# on s'occupe d'abord de substituer les espaces contenus dans les répertoires 

[tmpfs]$ find . -type d -name "*" -exec bash -c 'name=${1};final=${1/ /_}; mv "${name}" "${final}"' - {} \; 2>/dev/null
[tmpfs]$ tree
.
|-- mon_rep1
|   |-- mon fichier1.txt
|   |-- mon fichier2.txt
|   |-- mon fichier3.txt
|   |-- mon fichier4.txt
|   `-- mon fichier5.txt
|-- mon_rep2
|   |-- mon fichier1.txt
|   |-- mon fichier2.txt
|   |-- mon fichier3.txt
|   |-- mon fichier4.txt
|   `-- mon fichier5.txt
`-- mon_rep3
    |-- mon fichier1.txt
    |-- mon fichier2.txt
    |-- mon fichier3.txt
    |-- mon fichier4.txt
    `-- mon fichier5.txt

3 directories, 15 files

# Maintenant on s'occupe des fichiers

[tmpfs]$ find . -type f -exec bash -c 'name=$(basename "$1"); rep=$(dirname "$1"); final=${name/ /_}; mv "${1}" "${rep}/${final}"' - {} \; 2>/dev/null
[tmpfs]$ tree
.
|-- mon_rep1
|   |-- mon_fichier1.txt
|   |-- mon_fichier2.txt
|   |-- mon_fichier3.txt
|   |-- mon_fichier4.txt
|   `-- mon_fichier5.txt
|-- mon_rep2
|   |-- mon_fichier1.txt
|   |-- mon_fichier2.txt
|   |-- mon_fichier3.txt
|   |-- mon_fichier4.txt
|   `-- mon_fichier5.txt
`-- mon_rep3
    |-- mon_fichier1.txt
    |-- mon_fichier2.txt
    |-- mon_fichier3.txt
    |-- mon_fichier4.txt
    `-- mon_fichier5.txt

3 directories, 15 files
[tmpfs]$ 
;-))

PS. Si il y a plus d'un espace dans les noms de fichiers ou de répertoires, changer la syntaxe de :
final=${name/ /_}
par :
final=${name// /_}
JP - Éleveur de pingouins -
Faites un geste pour l'environnement, fermez vos fenêtres et adoptez un manchot.

Répondre à jipicy

2

touchepasaugrisbi, le 25 avr 2008 à 15:53:35

Merci pour tes suggestions jipici !

Ci-après le script final ;

#!/bin/bash
###
#
# Remplace le caractères espace ' ' par le caractère underscore '_'
# Permet un parcours descendant de l'arborescence
#
###

#
# Remplace les espaces dans les noms de répertoire
#
# Un espace 
oneSpaceInDirectory() {
	find . -type d -name "*" -exec bash -c 'name=${1};final=${1/ /_}; mv "${name}" "${final}"' - {} \; 2>/dev/null
}
# Plusieurs espaces
moreOneSpaceInDirectory() {
	find . -type d -name "*" -exec bash -c 'name=${1};final=${1// /_}; mv "${name}" "${final}"' - {} \; 2>/dev/null
}

#
# Remplace les espaces dans les noms de fichier
#
# Un espace 
oneSpaceInFile() {
	find . -type f -exec bash -c 'name=$(basename "$1"); rep=$(dirname "$1"); final=${name/ /_}; mv "${1}" "${rep}/${final}"' - {} \; 2>/dev/null
}
# Plusieurs espaces
moreOneSpaceInFile() {
	find . -type f -exec bash -c 'name=$(basename "$1"); rep=$(dirname "$1"); final=${name// /_}; mv "${1}" "${rep}/${final}"' - {} \; 2>/dev/null
}


remplaceSpaceInDirectory() {
	moreOneSpaceInDirectory
	for z in $(ls)
	do
		if test -d $z
		then
			cd $z; remplaceSpaceInDirectory; cd ..
		fi
	done
}

remplaceSpaceInFile() {
	oneSpaceInFile
	for z in $(ls)
	do
		if test -d $z
		then
			cd $z; remplaceSpaceInFile; cd ..
		fi
	done
}

remplaceSpaceInDirectory
remplaceSpaceInFile


jielbee
Un UNIX, sinon rien !

Répondre à touchepasaugrisbi

3

 jipicy, le 25 avr 2008 à 20:09:12

Cool, merci ;-))

Par contre, pas la peine de faire 2 fonctions à chaque fois, une seule suffit avec la syntaxe traitant plusieurs espaces, elle traitera tout aussi bien, un seul espace que plusieurs ,-))
JP - Éleveur de pingouins -
Faites un geste pour l'environnement, fermez vos fenêtres et adoptez un manchot.

Répondre à jipicy