¿Cómo puedo cambiar el nombre de todos los archivos en un directorio específico donde los archivos contienen espacios en blanco y caracteres especiales ($ y @) en sus nombres?
Intenté el rename
comando de la siguiente manera para reemplazar todos los espacios y caracteres especiales con un _:
$ ls -lrt
total 464
-rwxr-xr-x. 1 pmautoamtion pmautoamtion 471106 Jul 17 13:14 Bharti Blocked TRX Report Morning$AP@20150716.csv
$ rename -n 's/ |\$|@/_/g' *
$ ls -lrt
total 464
-rwxr-xr-x. 1 pmautoamtion pmautoamtion 471106 Jul 17 13:14 Bharti Blocked TRX Report Morning$AP@20150716.csv
$
El comando funciona pero no hará ningún cambio en los nombres de los archivos y tampoco devolverá ningún error. ¿Cómo puede solucionar esto y hay otras formas también?
linux
shell-script
rename
Ankit Vashistha
fuente
fuente
Respuestas:
La
-n
bandera es paraEntonces es normal si no tienes ningún cambio.
En cuanto a su comando, está funcionando para mí:
Tal vez dependiendo de tu caparazón, tienes que escapar del |
O puede usar la
[…]
notación para agrupar caracteres:fuente
rename -n 's/./_/g' *
salidas algo?Podrías intentarlo así:
Si está satisfecho con el resultado, elimine el
echo
antesmv
para cambiar el nombre de los archivos.fuente
buscando un guión atractivo para eliminar caracteres especiales, así como caracteres especiales alemanes, reemplazándolos por caracteres universales para no eliminar información útil. He actualizado la última versión del guión que tenía algunos problemas menores que resultaban en:
Resultando en:
@don_crissti: Él está haciendo el hokus-pokus con el archivo ya que Linux tendría sus propios problemas con el manejo de caracteres especiales al mover el nombre de archivo.
fuente
Dado que el
rename
comando no funcionó para mí por razones desconocidas y no obtengo ninguna otra respuesta para mi pregunta, intenté hacer un esfuerzo para hacer posible el cambio de nombre. Puede que este no sea el mejor enfoque para cambiar el nombre de los archivos, pero funcionó para mí y es por eso que me gustaría publicarlo como respuesta para que, si alguien más lo lee, pueda obtener ayuda para cambiar los nombres de los archivos de la manera que lo hice.Ahora, para mí, sé que todos los archivos tendrán un texto específico en sus nombres, que es la palabra "Bloquear". Los siguientes son los nombres de archivo antes de que se realizara el cambio de nombre:
Ahora he escrito un pequeño script de shell para hacer esto posible. El siguiente es el código:
Y eso es todo, cuando ejecuto el script, cambia el nombre de todos los nombres de archivos que tienen espacios en blanco (
)
$
o@
con o en_
lugar de estos caracteres.fuente
cat foo | sed S1 | sed S2 | sed S3 >> bar
porsed -e S1 -e S2 -e S3 foo >> bar
sed 's/[ ()@$]/_/g'
osed 'y/ ()@$/_____/'
Este solo quita los caracteres especiales de los nombres de archivo
poner
echo
después; do
a prueba antes, como:Otra solución:
-n
opción de probar antes.fuente
He estado buscando una solución a este problema por un tiempo. Trabajo en viejos sistemas cerrados que no pueden tener nuevos paquetes instalados. No tengo el
rename
comando Finalmente escribí un script que parece funcionar con todos los caracteres especiales ingresados por el teclado.~@#$%^&*()-_=+[]{}\|;:",<.>?'
El script cambiará el nombre de cada archivo y directorio en el directorio actual. Reemplazará todos los caracteres especiales, excepto-_.
con el_
carácter. Laoutfile=
línea se puede modificar para usar un carácter diferente para el reemplazo si se desea. Reemplace|_|
con|.|
para usar el.
personaje, por ejemplo.fuente
Para mí, en Ubuntu 18.04 LTS con bash 4.4.20 (1), la versión de esta línea funcionó bien para eliminar espacios, @,: # ...
Para probar (tenga en cuenta el
echo
comando:Ejecutar:
fuente