puedes usar detox
por Doug Harple
detox -r <folder>
Usa rename
(también conocido como prename
), que es un script de Perl que puede estar ya en su sistema. Hazlo en dos pasos:
find . -name "* *" -type d | rename 's/ /_/g' # do the directories first
find . -name "* *" -type f | rename 's/ /_/g'
Basado en Jürgen's respuesta y capaz de manejar múltiples capas de archivos y directorios en un solo enlace usando la versión "Revisión 1.5 1998/12/18 16:16:31 rmb1" de /usr/bin/rename
(una secuencia de comandos de Perl):
find /tmp/ -depth -name "* *" -execdir rename 's/ /_/g' "{}" \;
Yo uso:
for f in *\ *; do mv "$f" "${f// /_}"; done
Aunque no es recursivo, es bastante rápido y simple. Estoy seguro de que alguien aquí podría actualizarlo para que sea recursivo.
El ${f// /_}
part utiliza el mecanismo de expansión de parámetros de bash para reemplazar un patrón dentro de un parámetro con la cadena proporcionada. La sintaxis relevante es ${parameter/pattern/string}
. Consulte: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
No pude hacerlo bien al principio, porque no pensé en los directorios.