Como faço para que “cp” no OS X não exclua arquivos?

3

Veja a melhor maneira de descrever isso:

dirA
   dir1
      file1.txt
      file3.txt
dirB
   dir1
      file1.txt
      file2.txt

Eu quero copiar o conteúdo de dirB para dirA. cp -R dirB/* dirA excluirá dir1 e copiará os arquivos, resultando em:

dirA
   dir1
      file1.txt
      file2.txt

Mas eu quero mesclá-los (como seria no Windows) e acabar com:

dirA
   dir1
      file1.txt
      file2.txt
      file3.txt

Sugestões? Eu tentei ditto , mas isso parece ignorar a parte recursiva e apenas despejar todos os arquivos na pasta de nível superior.

    
por SkippyFlipjack 26.10.2009 / 22:28

7 respostas

5

Não use cp. Use o rsync .

( link de desenvolvimento da Apple .)

    
por 26.10.2009 / 22:34
2

cp não não excluir arquivos.

    
por 26.10.2009 / 22:33
2

Use a opção -i para cp

     -i    Cause cp to write a prompt to the standard error output before
           copying a file that would overwrite an existing file.  If the
           response from the standard input begins with the character 'y'
           or 'Y', the file copy is attempted.  (The -i option overrides
           any previous -n option.)
    
por 26.10.2009 / 23:12
1

Deve haver uma maneira elegante, mas como um truque rápido: remova a permissão de gravação dos arquivos em dir1 e faça um cp -r.

    
por 26.10.2009 / 22:35
0

dirA    dir1       file1.txt       file3.txt dirB    dir1       file1.txt       arquivo2.txt

Eu faria assim:

$ cd dirA
$ tar cf - | (cd .../dirB ; tar xf -)

Os arquivos são sobrescritos, os diretórios não.

    
por 27.10.2009 / 17:43
0

A solução Erics funcionou, mas eu tive que ajustar um pouco a sintaxe:

$ cd dirA
$ tar -cf - ./* | (cd .../dirB ; tar -xf -)
    
por 19.06.2010 / 08:37
0

Estou fazendo algo semelhante com um script de exportação. Aqui está o comando que estou usando:

cp -R demo_files/. demo

Isso irá mesclar os arquivos em demo_files com os arquivos em demonstração. Não deve substituir nada.

    
por 26.10.2009 / 22:35

Tags