commande mv - ne pas écraser les fichiers

8

Je veux des mvfichiers et ne pas écraser les doublons. Le -bcommutateur ne fait qu'un seul fichier de sauvegarde, alors que j'en ai peut-être plusieurs.

Selon la mvpage de manuel :

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

aucune, désactivée,
ne faites jamais de sauvegardes (même si --backup est donnée)
numérotées, t
faites des sauvegardes numérotées
existantes, zéro
numérotées s'il existe des sauvegardes numérotées, simple sinon
simple, ne
faites jamais toujours des sauvegardes simples

Je pense que je veux utiliser l'option "existante, nulle" ... mais je ne sais pas comment appeler cela.

Si ma commande est:

mv $src $dest

Comment puis-je implémenter l'option «existante, nulle»?

Soit mon ami
la source
Cette réponse a une bonne réponse sur l'utilisation cpau lieu de mv: unix.stackexchange.com/a/9902
Connor Leech

Réponses:

6

Pour activer existingou nil(ou l'une des autres options), passez-les comme valeurs pour l' --backupoption:

mv --backup=existing "$src" "$dest"
mv --backup=nil "$src" "$dest"

Soyez averti que cela ne fait pas ce que vous voulez:

$ mkdir foo bar
$ cp blah/* foo
$ cp blah/* bar
$ mv --backup=nil bar/* foo/* -t blah
mv: will not overwrite just-created ‘blah/a.jpg’ with ‘foo/a.jpg’
mv: will not overwrite just-created ‘blah/b.ogv’ with ‘foo/b.ogv’
mv: will not overwrite just-created ‘blah/cd ef.JpG’ with ‘foo/cd ef.JpG’

Vous voulez réellement numbered/ t:

$ mv --backup=numbered bar/* foo/* -t blah
$ ls blah 
a.jpg  a.jpg.~1~  a.jpg.~2~  b.ogv  b.ogv.~1~  b.ogv.~2~  cd ef.JpG  cd ef.JpG.~1~  cd ef.JpG.~2~
muru
la source
cela semble vraiment cryptique. À quoi sert l'option de sauvegarde?
Connor Leech
1
@ConnorLeech pour contrôler les paramètres de sauvegarde?
muru
0
mv --backup=existing $src $dest

ou

mv --backup=nil $src $dest
Florian Diesch
la source
Après de nombreuses tentatives, j'ai obtenu le fonctionnement de la syntaxe - mais l'option nil n'a pas fonctionné. --backup = t le fait cependant. MERCI!
BeMy Friend
0
mv --backup=t "$src/$file" "$dest"
Soit mon ami
la source
pour plus de détails, voirman mv
Elder Geek