Copiar arquivos com renomeação


28

Eu tenho uma enorme árvore de arquivos. Alguns arquivos têm o mesmo nome, mas em casos diferentes, por exemplo, some_code.ce Some_Code.c.

Então, quando estou tentando copiá-lo para um sistema de arquivos NTFS / FAT, ele me pergunta se quero que ele substitua o arquivo ou ignore-o.

Existe alguma maneira de renomear automaticamente esses arquivos, por exemplo, adicionando  (1)ao nome do arquivo de conflito (como o Windows 7)?


Curioso. Eu só queria ver que tipo de erro eu recebo se eu tentar produzir um arquivo com o mesmo nome em uma partição NTFS (HPFS / NTFS, de acordo com sudo fdisk -l /dev/sda), e fiz touch foo; touch Fooe terminou com 2 arquivos fooe Foo. Mas não estou curioso para reiniciar o Windows, para ver como eles são lá. Pode ser apenas um problema de FAT? Ah - Eu tenho um pendrive com FAT e poderia criar um sistema FAT dentro de um arquivo ... - um momento, por favor. :)
usuário desconhecido

Respostas:


41

Muitas ferramentas GNU, como cp, mve tarsuportam a criação de arquivos de backup quando o destino existe. Ou seja, ao copiar foopara bar, se já houver um arquivo chamado bar, o existente bar será renomeado e após a cópia barconter o conteúdo de foo. Por padrão, baré renomeado para bar~, mas o comportamento pode ser modificado:

                                # If a file foo exists in the target, then…
cp -r --backup source target    #   rename foo → foo~
cp -r --backup=t source target  #   rename foo → foo.~1~ (or foo.~2~, etc)

Existem outras variantes, como a criação de backups numerados somente quando já existe. Veja o manual do coreutils para mais detalhes.


1
Brilhante. Eu não sabia que essa opção existia e provou ser extremamente útil. Obrigado @Gilles.
Steve Hill

2
OSX cp não possui sinalizador --backup. use brew install coreutilse use o comando gcp.
Weston Ganger 21/03

6

eu tentei

apropos copy | grep "(1)" 

para encontrar possíveis candidatos, e o mcopy apareceu.

man mcopy 

mostra uma opção promissora -D clash-optionnão é legal? Mas não é tão legal - não está descrito. Mas existem algumas dicas para o mtools.dvi, que pesquisei no meu sistema, sem sucesso, e via google, sem sucesso, mas depois, com o google, pesquisei diretamente mcopy clash-optione encontrei este site .

Fiz um pequeno teste

mcopy -D A f* a 

para testes de nome do autor e targetdir a- em vez de nomear o autor, ele pediu que todos os arquivos ignorassem ou substituíssem, que idiotice ...

Minha versão é mtools-4.0.10e a página de ajuda é de 1996 a 15 anos. Devemos realmente perder alguns recursos, enquanto isso?

Eu dividiria o trabalho em duas etapas:

  • Crie uma função curta, que gera um nome exclusivo para um arquivo, se esse nome estiver ocupado.
  • Execute finde execute esse script para cada arquivo que você deseja copiar.

Devemos ajudar nessa abordagem? :)

Aqui está um script para arquivos de nome de autor:

#!/bin/bash

name=$1
target=$2

autorename () {
name=$1
target=$2
no=$3 

test -e ${target}/${name}.$no && autorename ${name} ${target} $((no+1)) || cp ${name} ${target}/${name}.$no 

}

test -e ${target}/${name} && autorename ${name} ${target} 0 || cp ${name} ${target} 

e esta é minha invocação de teste:

find -maxdepth 1 -name "fo*" -type f -exec ./autorename.sh {} /mnt/hidden/test/a ";"

Nota: -maxdepth, -name e -type foram usados ​​para restringir drasticamente o número de arquivos afetados. Não testei o script para estruturas de arquivos mais profundas, nem para espaços em branco nos nomes de arquivos e outros caracteres descolados, como avanço de linha, avanço de página e assim por diante.

Eu usei .1 porque não cria problemas na maioria dos comandos, enquanto a (e a) geralmente precisam ser mascarados.



0

Não com o GNU cp, pelo menos.

É altamente recomendável que você não tenha nomes de arquivos duplicados (ignorando maiúsculas e minúsculas), pois eles causarão um grande sofrimento a você. Encontre uma lista dessas duplicatas usando

find . | tr A-Z a-z | sort | uniq -d

Em seguida, renomeie manualmente um dos arquivos para cada linha, se for exibido. Tente evitar criar duplicatas no futuro.


O cara nunca deu a entender que foi ele quem criou essa bagunça.
tshepang 14/07/11

Bem, sim, é verdade, mas ele é o único a sofrer as consequências ☺
jmtd

Eu tenho uma situação em que acabei com backups de tempos ligeiramente diferentes. Deseja combiná-los, mas não descarta versões diferentes. Por exemplo, pelo que sei, o mais antigo pode ser melhor. Só posso dizer depois que eu examino. Enquanto isso, é necessário copiar e renomear backups.
abalter 6/07/07
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.