mv comando - não sobrescreva arquivos

8

Eu quero mv arquivos e não substituir duplicados. A opção -b faz apenas um único arquivo de backup, enquanto eu posso ter muitos.

De acordo com a mv man page :

  

O sufixo de backup é '~', a menos que seja definido com --suffix ou SIMPLE_BACKUP_SUFFIX. O método de controle de versão pode ser selecionado através da opção --backup ou através da variável de ambiente VERSION_CONTROL. Aqui estão os valores:

     

nenhum, fora
      nunca faça backups (mesmo se - o backup for dado)
numerado, t
      faça backups numerados
existente, nulo
      numerados se houver backups numerados, simples, caso contrário, simples, nunca
      faça sempre backups simples

Acho que quero usar a opção 'existente, nulo' ... mas não consigo descobrir como chamar isso.

Se meu comando for:

mv $src $dest

Como posso implementar a opção 'existente, nulo'?

    
por BeMy Friend 23.01.2015 / 19:50

3 respostas

6

Para ativar existing ou nil (ou qualquer uma das outras opções), passe-os como valores para a opção --backup :

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

Esteja avisado que isso não faz o que você quer:

$ 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’

Você realmente deseja 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~
    
por muru 23.01.2015 / 20:01
0
mv --backup=existing $src $dest

ou

mv --backup=nil $src $dest
    
por Florian Diesch 23.01.2015 / 20:00
0
mv --backup=t "$src/$file" "$dest"
    
por BeMy Friend 23.01.2015 / 20:04

Tags