¿Cómo renombrar recursivamente archivos / carpetas para que sus nombres sean compatibles con Windows?

11

Tengo un montón de archivos en un cuadro de Ubuntu, que tienen varios caracteres en sus nombres de archivo que Windows no acepta (principalmente ":" y "*", pero posiblemente otros).

¿Cuál es la forma más simple de cambiar el nombre y moverlos a una máquina con Windows? Está bien reemplazar estos caracteres con algo como "[dos puntos]" y "[asterisco]".

RomanSt
fuente
1
Debe evitar tales nombres incluso bajo Linux (especialmente *).
cYrus
44
@cYrus Depende de cómo maneje los archivos. Me imagino que es solo un problema con las secuencias de comandos y los shells. Estoy en OS X y el único personaje prohibido es :, lo cual es bastante malo. Nombrar documentos después de su contenido es útil, y si el nombre de un artículo termina con una pregunta, también lo debería ser el nombre del archivo.
Daniel Beck
@cYrus y yo lo hacemos, en mi software, pero algunos programas han sido escritos por personas que no lo hacen. Por ejemplo, qmail usa: en casi cada nombre de archivo que crea.
RomanSt
@Daniel Beck: Claro, pero desafortunadamente tener un sistema de archivos que admita dichos nombres no es suficiente, ya que puedes usar programas que lo ensucian todo. Ni siquiera uso espacios.
cYrus
2
@Steven buena pregunta! Creo que Windows sería un poco más útil, ya que puede suceder que alguien reciba los archivos en Windows y tenga que arreglarlos en esa plataforma.
Peltier

Respuestas:

4

Echa un vistazo al cambio de nombre y desintoxicación de Glindra .

Las utilidades de archivos de Glindra se pueden instalar en Windows o Linux. Ejemplos de limpieza de nombres de archivos en Windows:

rena *.* -portable

rena *.* -safe
  • -Safe asigna
    guiones iniciales (guiones) a guiones bajos.
    Contrae espacios.
    Asigna caracteres problemáticos como * ?: [] "<> | () {} para subrayar.
  • -portable
    Realiza las mismas operaciones de limpieza que -safe, y además: asigna
    todos los caracteres de 8 bits de la mitad superior del alfabeto latino 1 a caracteres de reserva razonables de 7 bits.
    Mapea los caracteres de comillas simples '' ´ para subrayar.

Fuente: fijación de nombres de archivo Unix / Linux / POSIX: caracteres de control (como Newline), guiones iniciales y otros problemas

Pausado hasta nuevo aviso.
fuente
Esa página muestra un 404. Copia en caché de Google .
Daniel Beck
¡Esa es una diatriba increíble de David Wheeler! Especialmente después de haber golpeado mi teclado después de intentar crear un CD en un directorio que JungleDisk llamó "~ \ irina". ¿Quieres adivinar si la finalización de la pestaña funcionó? ...
RomanSt
1
Detox es para hacer que los archivos de Windows sean compatibles con Unix, no al revés.
endolito
3
@DennisWilliamson: parece que glindra (para Windows) no puede cambiar el nombre de los caracteres con nombres de archivo no válidos. G:\spc>rena.exe -safe -portable *.txtsalidas[FATAL-ERROR] Filename syntax error: aa:a.txt
Steven
1
Tenga en cuenta el cambio en la sintaxis cuando vaya a Linux, es decir rena '*.*' -portable, y si lo desea de forma recursiva, use algo como rena '***/*.*' -portableen Linux. Y creo que el cambio de nombre debe hacerse en Linux, no en Windows.
holroy
4

Prueba Recuva .

Es la única utilidad de Windows que he encontrado que maneja nombres de archivo no compatibles con Windows.

Habilite Escanear en busca de archivos no eliminados (para recuperación de discos dañados o reformateados) y escanee su carpeta. En la restauración, habilite Restaurar estructura de carpetas . Recuva efectivamente "copiará" todo el directorio a otra ubicación mientras "santifica" los nombres de archivo hostiles.

Steven
fuente
1

Sin estar en Linux y sin probar nada, creo que uno podría usar frases ingeniosas como las siguientes.

Para cambiar un personaje:

find . -type f -exec rename 's/:/\[colon\]/g' {} +
find . -type f -exec rename 's/\*/\[asterisk\]/g' {} +

Y finalmente para eliminar todos los caracteres no alfanuméricos:

find . -type f -exec rename 's/[^A-Za-z0-9._]//g' {} +
harrymc
fuente
Tenga en cuenta que esto debe ampliarse con todos los demás caracteres ilegales de Windows, es decir<>:"/\|?*
holroy
0

Si sus archivos ya están en un volumen NTFS, parece que ejecutar chkdisk desde Windows "resuelve" el problema. Desafortunadamente, parece que lo hace al eliminar los archivos ofensivos.

Peltier
fuente
0

Me las arreglé con una combinación de las dos primeras respuestas, más pyRenamer (GUI). En Linux, utilicé pyRenamer para contraer espacios en los nombres de carpetas (directorios), sustituyendo el espacio con nada, para que los otros programas (cambio de nombre de Glindra) funcionen de forma recursiva (uno podría poner guiones bajos). De los archivos, también saqué algunos caracteres o palabras aceptables para Windows para ahorrar espacio, y espacios colapsados ​​de manera similar en los nombres de archivo. Luego ejecuté rena para extraer caracteres que no son de Windows, los guardé en una unidad flash y luego usé Recuva para 'restaurar' a una carpeta en Windows. Recuva indica si la ruta de un archivo es demasiado larga (y también elimina los caracteres que no son de Windows). Todavía no he encontrado una herramienta que verifique la ruta de los nombres de archivo para ver si están por debajo del límite máximo de Windows de 255 (o digamos 240 para permitir un margen de maniobra).

Vitex
fuente