GNU/Linux >> Tutoriales Linux >  >> Linux

¿Cómo cambiar el nombre de todos los archivos con caracteres especiales y espacios en un directorio?

El -n la bandera es para

--no-act

Sin acción:muestra qué archivos se habrían renombrado.

Así que es normal si no tienes ningún cambio.

Con respecto a tu comando, me funciona:

$ touch "a @ test"
$ ls
a @ test
$ rename -n 's/ |\$|@/_/g' *
a @ test renamed as a___test

Tal vez, dependiendo de tu caparazón, tengas que escapar del |

$ rename -n 's/ \|\$\|@/_/g' *

O puede usar el […] notación para agrupar caracteres:

$ rename -n 's/[ @\$]/_/g' *

Podrías probar así:

for file in ./*Block*                                       
do echo mv "$file" "${file//[ ()@$]/_}"
done

Si está satisfecho con el resultado, elimine el echo antes de mv para cambiar el nombre de los archivos.


Buscando un script atractivo para eliminar caracteres especiales, así como caracteres especiales alemanes, reemplazándolos con caracteres universales para no eliminar información útil. Actualicé la última versión del script que tenía algunos problemas menores que resultaron en:

#!/bin/bash

for file in ./*
do
  infile=`echo "${file:2}"|sed  \
         -e 's|"\"|"\\"|g' \
         -e 's| |\ |g' -e 's|!|\!|g' \
         -e 's|@|\@|g' -e 's|*|\*|g' \
         -e 's|&|\&|g' -e 's|]|\]|g' \
         -e 's|}|\}|g' -e 's|"|\"|g' \
         -e 's|,|\,|g' -e 's|?|\?|g' \
         -e 's|=|\=|g'  `
  outfileNOSPECIALS=`echo "${file:2}"|sed -e 's|[^A-Za-z0-9._-]|_|g'`
  outfileNOoe=`echo $outfileNOSPECIALS| sed -e 's|ö|oe|g'`
  outfileNOae=`echo $outfileNOoe| sed -e 's|ä|ae|g'`
  outfileNOue=`echo $outfileNOae| sed -e 's|ü|ue|g'`
  outfileNOOE=`echo $outfileNOue| sed -e 's|Ö|OE|g'`
  outfileNOAE=`echo $outfileNOOE| sed -e 's|Ä|AE|g'`
  outfileNOUE=`echo $outfileNOAE| sed -e 's|Ü|UE|g'`
  outfileNOss=`echo $outfileNOUE| sed -e 's|ß|ss|g'`
  outfile=${outfileNOss}
  if [ "$infile" != "${outfile}" ]
  then
        echo "filename changed for " $infile " in " $outfile
        mv "$infile" ${outfile}
  fi
done

exit

resultando en:

@don_crissti:Está haciendo tonterías con el archivo interno ya que Linux tendría sus propios problemas con el manejo de caracteres especiales al mover el nombre del archivo.


Linux
  1. ¿Cómo eliminar todos los archivos con una extensión particular en una carpeta particular?

  2. Cómo cambiar la propiedad de archivos y directorios con el comando chown

  3. Cómo encontrar todos los archivos con tamaño de archivo cero (0) bytes en un directorio recursivamente

  4. Cómo cambiar todas las apariciones de una palabra en todos los archivos de un directorio

  5. ¿Cómo cambio el nombre de los archivos con espacios usando el shell de Linux?

Cómo manipular nombres de archivos que tienen espacios y caracteres especiales en Linux

Cambiar el nombre de todos los archivos y nombres de directorios a minúsculas en Linux

Cómo cambiar el nombre de archivos y directorios en Linux

Cómo excluir archivos y directorios con Rsync

Cómo copiar archivos y directorios en Linux

Usar find y tar con archivos con caracteres especiales en el nombre