[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Renommer récursivement



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

Reply to: