Cercando di copiare l'archivio da una condivisione di rete a un'altra mentre si ignora il carattere di tilde

6

Ho provato a copiare un volume di archivio da una condivisione di rete a un'altra. Poiché la maggior parte di questi file sono file Mac, utilizzo Mac Terminal per farlo. Ho provato ogni combinazione di cp, rsync, and ditto che potrei inventare.

Il problema sta nel fatto che molti di questi file hanno un nome simile e ogni tanto ne trovo uno che ha un carattere tilde nel nome del file. A seconda di quale variazione del comando cp or rsync io utilizzo, quando si imbatte in questo errore o non riesce, affermando che il file esiste già, oppure, salta il file con la tilde tutto insieme e continua con il processo.

Ad esempio: "28910 BP Umba Show.SIT" è identico a "28910B ~ 1.SIT" e pertanto non verrà copiato nella nuova posizione di archiviazione.

Qualsiasi aiuto è molto apprezzato, grazie in anticipo.

    
posta user1539563 06.07.2017 - 23:52
fonte

1 risposta

3

Il nome file 28910B~1.SIT ha l'aspetto di un nome di file abbreviato MS-DOS con più di 8,3 caratteri (nomi di file lunghi).

È importante notare che da Windows 2000 sono stati mantenuti sia il nome lungo che il nome abbreviato 8.3 (il file contiene entrambi i nomi )

...when an application saves a file on a computer running Windows 2000, both the 8.3 file name and long file name are retained.

Ad esempio, 28910 BP Umba Show.SIT viene automaticamente abbreviato in 28910B~1.SIT e i duplicati vengono incrementati ( 28910B~2.SIT , 28910B~3.SIT , 28910B~4.SIT , ecc.) Puoi leggere di più su questa convenzione di denominazione su Microsoft Tech Network

C'è una buona possibilità che sia un dupe di uno dei tuoi file, ma l'unico modo per sapere con certezza è quello di aprire entrambi e verificare.

Dal commento:

Either way, I need some magic that will copy the archive and ignore the tilde.

Non può ignorare la tilde - è lì e deve essere gestita; per quanto riguarda macOS, i due file hanno nomi identici (perché lo fanno).

Per copiare entrambi i file ma non sovrascrivere quello già presente nella cartella di destinazione, puoi eseguire un test rapido nel tuo comando per vedere se il file esiste già in un ciclo 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

Questo comando analizzerà la directory di origine, verificherà se il file esiste nella directory di destinazione, se lo fa, copierà il file aggiungendo l'ora corrente in secondi (per garantire l'assenza di duplicati multipli); se non esiste duplicato, copia semplicemente il file.

    
risposta data 07.07.2017 - 11:13
fonte

Leggi altre domande sui tag