Le 18/09/2010 23:47, Goldy a écrit :
Le 18/09/2010 13:41, Nicolas Roudninski a écrit :
Bonjour à tous,
J'imagine que cette question a du être maintes fois soulevée mais j'ai
beau googeliser, je ne trouve pas de réponse satisfaisante...
Je dispose d'une grande collection de musique organisée en sous
répertoires (Artiste/Albums/titre ou Artiste/Albums/disque-n/Titre). Or
je voudrais remplacer dans tous les répertoires et fichiers, les espaces
par des underscores.
J'ai tenté : find /opt/audio -exec rename 's/\s+/_/g' {} \;
Mais évidemment, ça me répond "/opt/audio/un artiste/un album/ Aucun
fichier ou répertoire de ce type" vu que le répertoire "un artiste" est
devenu "un_artiste". J'espère me faire bien comprendre.
Donc je cherche une commande, un script qui pourrait remplacer tous les
espaces en underscores en une seule fois.
Vous auriez ça sous le coude ?
Cordialement,
Nicolas Roudninski
J'y vais de mon petit script à moi, invoqué seul, il remplace les
espaces par des underscores, invoqué avec un paramètre quelconque, il
remplace les underscores par des espaces.
--
Luc Schimpf
www.au-ptit-bon-air.eu
#! /bin/bash
[ $# -eq 0 ] && command=removspace || command=restorspace
echo "command = $command"
explor () {
for file in "$1"/*; do
[ -f "$file" ] && $2 "$file"
[ -d "$file" ] && $2 "$file"
done
}
removspace () {
a=`echo "$1" | tr "[:blank:]" "_"`
mv "$1" "$a" &> /dev/null
[ -d "$a" ] && explor "$a" removspace
}
restorspace () {
b=$(echo $1 | sed 's/_/ /g')
mv "$1" "$b" &> /dev/null
[ -d "$b" ] && explor "$b" restorspace
}
for repert in * ; do
[ -d "$repert" ] && $command "$repert"
[ -f "$repert" ] && $command "$repert"
done