Como posso copiar arquivos com nomes de arquivos duplicados em um diretório e reter os dois arquivos fazendo com que as duplicações sejam renomeadas automaticamente?

7

No sistema operacional Windows, quando você copia um arquivo em um diretório que já possui um arquivo com esse nome, ele pergunta se você deseja:

  1. copie o arquivo e substitua / sobrescreva o existente
  2. cancelar a cópia do novo arquivo no diretório
  3. copie o arquivo, mas renomeie-o (como algo como "filename - copy (1)")

Quando faço isso no Ubuntu, não tenho essa terceira opção (que é muitas vezes uma opção muito útil). Existe alguma maneira de fazer isso no Ubuntu?

    
por heisenbergman 19.10.2014 / 12:30

2 respostas

8

Infelizmente o Nautilus não tem essa opção. Você poderia tentar outro gerenciador de arquivos como o Dolphin ou você pode usar o programa de linha de comando cp(1) com a opção de backup:

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

Isso tem os seguintes efeitos que podem ser controlados com outras opções, conforme descrito na página de manual de cp(1) :

  

--backup[=CONTROL] - faz um backup de cada arquivo de destino existente

     

-b - como --backup , mas não aceita um argumento

     

-S , --suffix=SUFFIX - substitui o sufixo de backup normal

     

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:

     
  • none , off : nunca faz backups (mesmo que --backup seja fornecido)
  •   
  • numbered , t : faça backups numerados
  •   
  • existing , nil : numerados se existirem backups numerados, caso contrário
  •   
  • simple , never : sempre faça backups simples
  •   

Exemplo

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

Isso copiará todos os arquivos em ~/Music para ~/Videos . Se um arquivo com o mesmo nome existir no destino, ele será renomeado anexando .orig ao seu nome como backup. Se houver um arquivo com o mesmo nome do backup, o backup será renomeado anexando .1 e, se houver, .2 e assim por diante. Só então o arquivo de origem é copiado para o destino.

Se você deseja copiar arquivos em subdiretórios, use recursivamente:

cp -R --backup=existing --suffix=.orig ~/Music ~/Videos
    
por David Foerster 19.10.2014 / 12:51
1

Encontrado no superusuário :

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

O arquivo com o mesmo nome é renomeado para o arquivo com o md5sum adicionado ao nome. Se você salvá-lo em um nome de arquivo como "saveCopy", pode usar find para executá-lo:

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

Para mais informações, veja o link.

    
por Rinzwind 19.10.2014 / 12:52

Tags