6 votes

Essayer de copier une archive d'un partage réseau vers un autre tout en ignorant le caractère tilde

J'ai essayé de copier un volume d'archive d'un partage réseau à un autre. Comme la plupart de ces fichiers sont des fichiers Mac, j'utilise le Terminal Mac pour le faire. J'ai essayé toutes les combinaisons de cp, rsync et ditto auxquelles j'ai pu penser.

Le problème réside dans le fait que de nombreux fichiers ont un nom similaire et de temps en temps je tombe sur un fichier qui a un caractère tilde dans le nom de fichier. En fonction de la variation de la commande cp ou rsync que j'utilise, lorsque cela se produit, soit elle échoue en indiquant que le fichier existe déjà, soit elle ignore le fichier avec le tilde et continue avec le processus.

Par exemple : "28910 BP Umba Show.SIT" est traité comme identique à "28910B~1.SIT" et ne sera donc pas copié vers le nouvel emplacement d'archive.

Toute aide est grandement appréciée, merci d'avance.

3voto

Douglas Points 10417

Le nom de fichier 28910B~1.SIT ressemble à un nom de fichier abrégé MS-DOS qui comporte plus de 8,3 caractères (noms de fichiers longs).

Il est important de noter que depuis Windows 2000, à la fois le nom long et le nom abrégé en 8,3 caractères ont été conservés (le fichier possédait les deux noms)

...quand une application enregistre un fichier sur un ordinateur exécutant Windows 2000, à la fois le nom de fichier 8.3 et le nom de fichier long sont conservés.

Par exemple, 28910 BP Umba Show.SIT est automatiquement abrégé en 28910B~1.SIT et les doublons sont incrémentés (28910B~2.SIT, 28910B~3.SIT, 28910B~4.SIT, etc.) Vous pouvez en savoir plus sur cette convention de nommage sur Microsoft Tech Network

Il y a de fortes chances que ce soit un doublon de l'un de vos fichiers, mais la seule façon de le savoir avec certitude est d'ouvrir les deux et de vérifier.

D'après le commentaire :

De toute façon, j'ai besoin d'une sorte de magie qui pourra copier l'archive et ignorer le tilde.

Il ne peut pas ignorer le tilde - il est là et doit être traité ; pour macOS, les deux fichiers ont des noms identiques (parce qu'ils le sont).

Pour copier les deux fichiers sans écraser celui déjà présent dans le dossier de destination, vous pouvez faire un test rapide dans votre commande pour voir si le fichier existe déjà dans une boucle 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

Cette commande va parcourir votre répertoire source, vérifier si le fichier existe dans le répertoire cible, s'il existe il va copier le fichier en ajoutant l'heure actuelle en secondes (pour éviter les doublons multiples) ; s'il n'y a pas de doublon, il copie simplement le fichier.

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X