puoi usare detox
di Doug Harple
detox -r <folder>
Usa rename
(ovvero prename
) che è uno script Perl che potrebbe essere già sul tuo sistema. Fallo in due passaggi:
find . -name "* *" -type d | rename 's/ /_/g' # do the directories first
find . -name "* *" -type f | rename 's/ /_/g'
Basato su Jürgen answer e in grado di gestire più livelli di file e directory in un unico limite utilizzando la versione "Revision 1.5 1998/12/18 16:16:31 rmb1" di /usr/bin/rename
(uno script Perl):
find /tmp/ -depth -name "* *" -execdir rename 's/ /_/g' "{}" \;
Uso:
for f in *\ *; do mv "$f" "${f// /_}"; done
Sebbene non sia ricorsivo, è abbastanza veloce e semplice. Sono sicuro che qualcuno qui potrebbe aggiornarlo in modo che sia ricorsivo.
Il ${f// /_}
part utilizza il meccanismo di espansione dei parametri di bash per sostituire un modello all'interno di un parametro con la stringa fornita. La sintassi pertinente è ${parameter/pattern/string}
. Vedi:https://www.gnu.org/software/bash/manual/html_node/Shell-Parameter-Expansion.html o http://wiki.bash-hackers.org/syntax/pe .
find . -depth -name '* *' \
| while IFS= read -r f ; do mv -i "$f" "$(dirname "$f")/$(basename "$f"|tr ' ' _)" ; done
all'inizio non sono riuscito a farlo bene, perché non pensavo alle directory.