Tenía un disco duro que no podía montarse en Linux Mint y para arreglarlo tuve que ir a Windows y hacerlo chkdsk /f e:
. chkdsk solucionó el problema pero cambió el nombre de cada archivo con caracteres especiales y los movió a un found.000
directorio. Así que ahora tengo que mover y renombrar nuevamente esos archivos como estaban antes. Si ejecuto un comando de vez en cuando para cambiar el nombre de los archivos con caracteres especiales, podría evitar que eso vuelva a suceder.
quiero recursivamentecambiar el nombre de archivos Y DIRECTORIOSdel directorio actual. Elnuevas líneasdebe ser reemplazadopor el espacio, elcaracteres < > : " \ | ? *
debiera serremotoo mejor aún, sustituido por caracteres similares que no estén reservados y elespaciosen elprincipio y finde un nombre de archivo debe serremoto. He aquí un ejemplo delo que quiero:
rename(' Fîlenämè\n\r\n$@<>:"\|?* \n ', 'Fîlenämè $@')
Aquí está lo que seríaaun mejor:
rename(' Fîlenämè\n\r\n$@<>:"\|?* \n ', 'Filename $@')
De acuerdo aesta respuestadebería ser algo como esto:
LC_ALL=C find . -depth -execdir rename -n 's/[\r\n]+/ /g; s/:/./g; s/[\|]/-/g; s/[<>"?*]//g; s/[ \f\t\v]+$//g; s/^[ \f\t\v]+//g' {} +
Necesito ignorar el ..Trash-1000
directorio ya que este comando me está dandoERRORES de entrada/saliday el comando deja de funcionar. Sería perfecto tener un script que maneje esos errores en caso de que haya archivos en ese directorio a los que se pueda cambiar el nombre.
Me dijeron que podara el ..Trash-1000
directorio como enesta respuesta. También eché un vistazo aÉste. Pero hacer esto no funciona:
LC_ALL=C find . -depth -path ./..Trash-1000 -prune -o -print -execdir rename -n 's/[\r\n]+/ /g; s/:/./g; s/[\|]/-/g; s/[<>"?*]//g; s/[ \f\t\v]+$//g; s/^[ \f\t\v]+//g' {} +
Y todavía no elimina espacios al principio y al final de los nombres de archivo.
Tuve que reescribir mi pregunta como la pregunta.Script para reemplazar recursivamente caracteres no válidos en nombres de archivos, no en directorios, con cambio de nombreno contesto el mio.
Respuesta1
En lugar de podar el directorio dando errores de entrada/salida, el comando se puede ejecutar una vez para cada uno de los demás directorios.
Este es el comando que utilicé para eliminar los caracteres reservados de Windows:
find . -execdir rename -n 's/[\r\n]+/ /g;
s/:/./g;
s/[\|]/-/g;
s/[<>"?*]//g;
s/[ \f\t\v]+$//g;
s/^[ \f\t\v]+//g' {} \;
Convierte las nuevas líneas en espacios, luego las sustituye , luego las cambia :
con , luego las elimina , luego elimina los espacios al final del nombre del archivo y luego hace lo mismo con los espacios al principio..
\|
-
<>"?*