3 votos

Renombrar archivos automáticamente para OneDrive

Tengo cientos de archivos con símbolos no válidos para OneDrive ( \/:*?"<>| ) y quiero renombrarlos automáticamente en mi Mac para poder guardarlos en la nube.

  • OneDrive para MacOS no parece tener la opción de renombrado automático, simplemente arroja un error y omite esos archivos para cargarlos.

Miré el comando zmv pero hasta ahora no he tenido éxito. Me las arreglé para cambiar el nombre de todos los espacios a _ con zmv '(*)' '${1/ /_}' pero en realidad eso no ayuda. La mayoría de estos caracteres especiales no funcionan con zmv, incluso si los escapo con \ .

Estoy en MacOS Ventura 13.4 y OneDrive 23.114.0530.0001. Hice una copia de seguridad de correos electrónicos de algunos años y su encabezado se utiliza automáticamente como nombre de archivo. Mis archivos de problemas contienen muchos de estos caracteres como:

This is an "E-Mail".eml
Is this an E-Mail?.eml
This is also an *E-Mail*.eml

¿Alguien tiene una idea de cómo puedo deshacerme de estos caracteres sin tener que renombrar estos ~650 archivos manualmente?

3voto

user43889 Puntos 266

Utilizo un Hazel regla para cambiar caracteres "raros" en nombres de archivos creados al "imprimir" páginas web a PDF. Busca caracteres particulares en los nombres de archivo y los modifica a algo menos problemático. Aunque no está dirigido específicamente a los archivos de OneDrive, se puede modificar fácilmente.

Esta es mi regla:

Hazel rule

Hazel funciona vigilando las carpetas y aplicando reglas a los archivos cada vez que se añaden. Cada regla consta de una prueba y una serie de acciones. La acción Renombrar es lo suficientemente compleja como para permitir cambiar caracteres específicos.

De ninguna manera pretendo que esto sea mejor que la impresionante respuesta de @bmike. Más bien estoy presentando como una solución muy diferente que puede apelar a algunas personas.

2voto

Oskar Puntos 1242

No encontramos un buen producto comercial (o algo de Microsoft) para hacer esto fuera de la caja, pero tengo una excelente experiencia con un script para arreglar los tres grandes problemas que tenemos con los archivos de OneDrive:

  • espacios iniciales en el nombre del archivo
  • caracteres finales que no pueden existir en OneDrive
  • caracteres ilegales para OneDrive

https://github.com/soundsnw/mac-sysadmin-resources/blob/master/scripts/fix-onedrive-filenames-apfs.sh

Por favor, asegúrese de tener una copia de seguridad completa antes de intentar este script. Está bien diseñado, y hace un montón de comprobaciones antes de que se ejecute, por lo que es relativamente seguro a pesar de que es demasiado largo para un principiante para analizar la seguridad.


Este script asume que usas Jamf pero sólo hay 4 líneas donde el /usr/local/jamf es llamado para notificarle el progreso o un error - debe comentarlos con un # al principio de cada línea de notificación.

Las líneas de las que hablo son: 199, 234, 287, y 291

1voto

Mikhail Morfikov Puntos 356

Puede utilizar zmv es sólo que algunos de los escapes son un poco inusuales. Esto reemplazará todos los espacios y caracteres especiales en los nombres de archivos en el directorio actual con _ :

autoload -Uz zmv
q='"'
zmv -nv '*[ \\:\*\?"<>\|]*' '${f//[ \\:\*\?${q}<>\|]/_}'

Algunas de las piezas:

  • -n - no-op. zmv informará de los cambios previstos pero no los ejecutará.
    Retire el -n cuando esté listo para renombrar los archivos.
  • -v - verboso.
  • *[...]* - patrón fuente. Esto coincidirá con cualquier archivo que tenga uno de los caracteres del patrón [...] juego de caracteres.
    • [...] - para seleccionar uno de los caracteres coincidentes.
    • \\:\*\?"<>\| - los personajes.
    • \\ , \* , \? , \| - estos caracteres tienen un significado especial en los patrones glob y deben escaparse.
    • , : , " , < , > - caracteres que no necesitan ser escapados.
  • '${f//[ \\:\*\?${q}<>\|]/_}' - patrón de destino.
    • ${f...} - f se establece mediante zmv al nombre del archivo de origen.
    • ${f//.../_} - que sustituye todas las coincidencias de un patrón glob por _ .
    • [ \\:\*\?${q}<>\|] - la misma lista de caracteres que antes, con una diferencia significativa. La dirección (e) indicador de expansión de parámetros que zmv utiliza aparentemente no puede manejar comillas dobles en un patrón, pero puede aceptar variables que contengan comillas dobles. Por lo tanto, este uses ${q} que se fijó en " en lugar de hacer referencia a " directamente.

Tenga en cuenta que los patrones no incluyen / es decir, una barra diagonal. Realmente no hay una manera en unix shell para tener una barra diagonal en un nombre de archivo, aunque hay una manera de tener barras oblicuas visibles en Finder .


Editado para añadir una zmv ejemplo.

Esto renombrará los archivos normales en el directorio actual y subdirectorios. Los nuevos nombres de archivo tendrán:

  • espacio en blanco inicial recortado.
  • otros caracteres consecutivos de espacio en blanco sustituidos por un único _ por ejemplo aa<space><tab><cr>bb se convertirá en aa_bb .
  • caracteres especiales actualizados en función de la asignación en la matriz asociativa.

    !/usr/bin/env zsh

    local -A map=( ['<']='(' ['>']=')' ['{']='(' ['}']=')' ['*']='.' ['?']='.' ['"']='-' ["'"]='-' ['\']='-' [':']='-' ['|']='-' ) local ch=${(kj..)map} newName() { setopt histsubstpattern extendedglob localoptions fn=${${1##[[:space:]]##}//[[:space:]]##/_} print -r -- ${fn:gs/(#b)([$ch])/$map[$match[1]]} } autoload -Uz zmv zmv -nv "(*/)([[:space:]$ch]*)(#q.)" '$1$(newName $2)'

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X