Substitution de caractères ... !
touchepasaugrisbi
Messages postés
75
Statut
Membre
-
jipicy Messages postés 41342 Statut Modérateur -
jipicy Messages postés 41342 Statut Modérateur -
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 :
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 !!!
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 !!!
A voir également:
- Substitution de caractères ... !
- Caractères spéciaux - Guide
- Caracteres speciaux - Guide
- Caractères spéciaux mac - Guide
- Caractères ascii - Guide
- Exemple de mot de passe à 8 caractères - Guide
2 réponses
Salut,
Tiens voilà une solution vite fait et à adapter :
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// /_}
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// /_}
Merci pour tes suggestions jipici !
Ci-après le script final ;
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