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.