Cópia de arquivo recursivo, sem sobrescrever?

15

Eu tenho um diretório que contém um monte de outras pastas contendo arquivos CoffeeScript / JavaScript. Eu sou capaz de compilar os arquivos CoffeeScript em uma nova pasta com a mesma estrutura de pastas.

O que eu quero fazer é copiar todos os arquivos * .js na pasta de origem para a pasta de destino de forma recursiva. Eu também não quero sobrescrever nenhum arquivo que já esteja presente na pasta de destino. Alguma idéia de como realizar isso?

Eu tentei usar cp -n source/**.js desination/ e cp -Rn source/**.js desination/ depois de analisar outra pergunta semelhante, mas parece que não está funcionando.

Alguma ideia de como fazer isso?

    
por AlbertEngelB 16.04.2014 / 17:04

3 respostas

16

Você poderia usar o rsync (ele também faz cópia local)

rsync -r --ignore-existing --include=*/ --include=*.js --exclude=* source/ destination
  • -r para recorrer aos diretórios,
  • --ignore-existing para ignorar os arquivos existentes no destino,
  • os significados dos include e exclude : incluem todos os diretórios, incluem todos os arquivos * .js, excluem o restante; a primeira inclusão é necessária, caso contrário, a exclusão final também excluirá os diretórios antes que o conteúdo seja varrido.

Por fim, você pode adicionar um -P , se desejar observar o progresso, um --list-only , se quiser ver o que ele copia sem realmente copiar, e um -t , se quiser preservar os timestamps. / p>

Isto não está relacionado, mas aprendi o comando rsync recentemente, quando mudei 15 anos de documentos de uma partição para outra. Confiante de que meus arquivos estavam lá, limpei a partição antiga e coloquei outras coisas lá; Percebi depois que perdi todos os timestamps e descobri o flag -t. Só queria compartilhar minha aflição: '(

    
por 16.04.2014 / 18:53
5

Isso também é possível usando cp. Veja aqui:

sudo cp -vnpr /xxx/* /yyy

xxx = source

yyy = destino

v = verboso

n = não há sobrescrever (não substituir)

p = preserve as permissões

r = recursivo

    
por 14.10.2015 / 18:02
4

Olhando para as páginas de manual, parece que você quer a opção -n .

-n, --no-clobber
   do not overwrite an existing file (overrides the previous -i option)
    
por 16.04.2014 / 17:34