Intentando copiar el archivo de un recurso compartido de red a otro mientras ignora el carácter de tilde

6

He estado intentando copiar un volumen de archivo de un recurso compartido de red a otro. Debido a que la mayoría de estos archivos son archivos de Mac, estoy usando Mac Terminal para hacerlo. He probado todas las combinaciones de cp, rsync, and ditto que se me han ocurrido.

El problema radica en el hecho de que muchos de estos archivos tienen un nombre similar y de vez en cuando encontraré uno que tiene un carácter de tilde en el nombre del archivo. Dependiendo de la variación del comando cp or rsync que uso, cuando falla, indica que el archivo ya existe o que omite el archivo con la tilde y continúa con el proceso.

Por ejemplo: "28910 BP Umba Show.SIT" se trata como idéntico a "28910B ~ 1.SIT" y, por lo tanto, no se copiará en la nueva ubicación de archivo.

Cualquier ayuda es muy apreciada, gracias de antemano.

    
pregunta user1539563 06.07.2017 - 23:52

1 respuesta

3

El nombre de archivo 28910B~1.SIT parece un nombre de archivo abreviado de MS-DOS que tiene más de 8.3 caracteres (nombres de archivo largos).

Es importante tener en cuenta que, desde Windows 2000, tanto el nombre largo como el nombre abreviado 8.3 se conservaron (el archivo tenía ambos nombres)

  

... cuando una aplicación guarda un archivo en una computadora que ejecuta Windows   2000, se conservan tanto el nombre del archivo 8.3 como el nombre largo del archivo.

Por ejemplo, 28910 BP Umba Show.SIT se abrevia automáticamente a 28910B~1.SIT y los duplicados se incrementan ( 28910B~2.SIT , 28910B~3.SIT , 28910B~4.SIT , etc.) Puede leer más sobre esta convención de nombres en Microsoft Tech Network

Hay una buena posibilidad de que sea un duplicado de uno de tus archivos, pero la única forma de saberlo con certeza es abrir y verificar ambos.

Del comentario:

  

De cualquier manera, necesito algo de magia que copie el archivo e ignore   la tilde.

No puede ignorar la tilde, está ahí y debe ser tratada; en lo que respecta a macOS, los dos archivos tienen nombres idénticos (porque lo hacen).

Para copiar ambos archivos pero no sobrescribir el que ya está en la carpeta de destino, puede realizar una prueba rápida en su comando para ver si el archivo ya existe en un bucle for / do:

for file in /source/directory; do $time=date +%s; if [[ -f /target/directory/$file ]]; then cp $file ${file}-${time}; else cp $file /target/directory/$file; fi; done

Este comando se analizará a través de su directorio de origen, verifique si el archivo existe en el directorio de destino, si lo hace, copiará el archivo agregando la hora actual en segundos (para garantizar que no haya duplicados); Si no existe ningún dupe, simplemente copia el archivo.

    
respondido por el Allan 07.07.2017 - 11:13

Lea otras preguntas en las etiquetas