Risposte:
Se hai zsh:
autoload zmv
zmv -QW '**/Old(/)' '**/New'
zmv -W '** / Vecchio' '** / Nuovo'
Qui autoload zmvcarica lo zmvscript fornito con zsh; zmv -W pattern replacementsignifica «per ogni corrispondenza ricordare il valore di tutti i caratteri jolly patterne sostituire i caratteri jolly corrispondenti replacementcon questo valore»; zmv -Qsignifica «consentire i qualificatori glob nel modello»; '**/Old'significa «trova tutti i file denominati« Vecchio »nella struttura nella directory corrente» e il (/)qualificatore glob limita «tutti i file» ad essere solo directory. Altre zmvopzioni utili :
-n: non fare nulla, basta stampare ciò che sarà fatto.-i: mostra ogni riga da eseguire e chiedi se eseguirla-f: forza la sovrascrittura dei file di destinazioneSe preferisci [ba] sh:
RnAll() { for f in "$1"/* ; do [ -d "$f" ] || continue ; ( RnAll "$f" "$2" "$3" ) ; [ "`basename $f`" \== "$2" ] && mv "$f" "`dirname $f`/$3" ; done }
RnAll . Old New
Questa è una soluzione sh quasi pura (o almeno bash), che non richiede altro che shell e coreutils.
Qualcosa come questo:
find . -type d -exec rename <rename options> \;
Le opzioni di ridenominazione varieranno a seconda di ciò renameche hai. Red Hat rinomina usa rename Old New {}, mentre i sistemi Debian / Ubuntu usano spesso "Perl rename", che usa questa sintassi:
rename 's/^Old$/New/' {}
Questo cambierà solo le corrispondenze esatte per "Vecchio"; utilizzare s/Old/New/gse si desidera modificare tutte le occorrenze di "Vecchio" in "Nuovo", comprese più occorrenze in un unico nome utente.
rename 's/^Old$/New/' {}... che cambierà solo le corrispondenze esatte per "Vecchio"; utilizzares/Old/New/gse si desidera modificare tutte le occorrenze di "Vecchio" in "Nuovo", comprese più occorrenze in un unico nome utente.