Substitution de caractères ... !
touchepasaugrisbi
Messages postés
76
Date d'inscription
Statut
Membre
-
jipicy Messages postés 40842 Date d'inscription Statut Modérateur Dernière intervention -
jipicy Messages postés 40842 Date d'inscription Statut Modérateur Dernière intervention -
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 !!!
Configuration: Linux Firefox 2.0.0.14
2 réponses
-
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// /_}
-
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