GNU/Linux >> Tutoriales Linux >  >> Linux

Cómo reemplazar espacios en nombres de archivos usando un script bash

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.


Linux
  1. ¿Cómo depurar un script Bash?

  2. ¿Cómo verificar la subcadena en Shell Script Bash?

  3. ¿Cómo cambiar el nombre de un archivo en Linux?

  4. ¿Cómo sé el nombre del archivo de script en un script Bash?

  5. ¿Cómo resaltar los scripts de Bash en Vim?

Cómo leer un archivo línea por línea en Bash

Cómo mostrar cuadros de diálogo GUI en bash script usando Zenity

35 ejemplos de secuencias de comandos Bash

Cómo cambiar automáticamente el fondo de GNOME en intervalos usando BASH

Cómo ejecutar un script Bash

¿Usando guiones bajos en los nombres de los archivos?