Question Comment puis-je copier des fichiers avec des noms de fichiers en double dans un seul répertoire et conserver les deux fichiers en faisant renommer automatiquement les doublons?


Sur Windows, lorsque vous copiez un fichier dans un répertoire contenant déjà un fichier portant ce nom, il vous demande si vous souhaitez:

  1. copier le fichier et remplacer / écraser celui existant
  2. annuler la copie du nouveau fichier dans le répertoire
  3. copier le fichier, mais le renommer (comme quelque chose comme "filename - copy (1)")

Quand je fais cela dans Ubuntu, je n'ai pas cette 3ème option (qui est souvent une option très utile). Est-il possible de faire cela dans Ubuntu?


8
2017-10-19 10:30


origine




Réponses:


Malheureusement, Nautilus n'a pas cette option. Vous pouvez essayer un autre gestionnaire de fichiers comme Dauphin  Install Dolphin ou vous pouvez utiliser le programme de ligne de commande cp(1) avec l'option de sauvegarde:

cp --backup SOURCE [SOURCE...] [DESTINATION]

Ceci a les effets suivants qui peuvent être contrôlés avec d’autres options comme décrit dans la page de manuel de cp(1):

--backup[=CONTROL] - faire une sauvegarde de chaque fichier de destination existant

-b - comme --backup mais n'accepte pas un argument

-S, --suffix=SUFFIX - remplacer le suffixe de sauvegarde habituel

Le suffixe de sauvegarde est ~, sauf si défini avec --suffix ou SIMPLE_BACKUP_SUFFIX. La méthode de contrôle de version peut être sélectionnée via le --backup option ou à travers le VERSION_CONTROL variable d'environnement. Voici les valeurs:

  • none, off: ne jamais faire de sauvegarde (même si --backup est donné)
  • numbered, t: faire des sauvegardes numérotées
  • existing, nil: numéroté s'il existe des sauvegardes numérotées, simple sinon
  • simple, never: faites toujours des sauvegardes simples

Exemple

cp --backup=existing --suffix=.orig ~/Music/* ~/Videos

Cela copiera tous les fichiers dans ~/Music à ~/Videos. Si un fichier du même nom existe à la destination, il est renommé en ajoutant .orig à son nom en tant que sauvegarde. Si un fichier portant le même nom que la sauvegarde existe, la sauvegarde est renommée en ajoutant .1 et si cela existe aussi .2 et ainsi de suite. Ce n'est qu'alors que le fichier source est copié vers la destination.

Si vous souhaitez copier des fichiers dans des sous-répertoires, utilisez récursivement:

cp -R --backup=existing --suffix=.orig ~/Music ~/Videos

10
2017-10-19 10:51



Merci pour la suggestion d'utiliser un gestionnaire de fichiers différent. Malheureusement, Thunar n'a pas non plus l'option dont je parle. Il ne contient que: Annuler, Tout ignorer, Ignorer, Remplacer, Tout remplacer. Je vais essayer Dolphin. - heisenbergman
Dolphin fonctionne très bien pour ça :) - heisenbergman
Merci d'avoir essayé les deux. Je mettrai à jour ma question en fonction de vos conclusions. - David Foerster
@heisenbergman, Salut qu'est-ce que tu veux dire par Dolphin fonctionne bien pour ça? Il offre l'option de renommer, mais il ne me permet toujours de renommer les fichiers qu'un par un. Malheureusement, l'option "appliquer à tous" ne peut pas être utilisée avec l'option de renommer. Ceci est tout à fait inutile pour une grande quantité de fichiers. Est-ce juste ma version? Avez-vous réussi à renommer tous vos doubles à la fois (comme vous pouvez le faire sous Windows), en utilisant Dolphin? - Kvothe


J'ai trouvé ça sur le superutilisateur:

#!/bin/bash
cp -vn "$1" "$2"/ || cp -vn "$1" "$2"/"${1##*/}"~"$(md5sum "$1" | cut -f1 -d' ')"

Le fichier qui porte le même nom est renommé dans le fichier avec le md5sum ajouté au nom. Si vous l'enregistrez sous un nom de fichier tel que "saveCopy", vous pouvez utiliser find comme ceci pour l'exécuter:

find . -name 'z*.jpg' -exec ./saveCopy {} /tmp/Extracted/ \;

Pour plus d'informations, consultez le lien.


1
2017-10-19 10:52