Saltar al contenido

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

Contamos con tu ayuda para compartir nuestros artículos referente a las ciencias informáticas.

Solución:

los -n la bandera es para

–no-acto

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

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

En cuanto a su comando, está funcionando para mí:

$ 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 puedes usar el […] notación para agrupar caracteres:

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

Podrías intentar 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 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:

ingrese la descripción de la imagen aquí

@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.

valoraciones y reseñas

Eres capaz de apoyar nuestra misión ejecutando un comentario o valorándolo te lo agradecemos.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *