Não use cp. Use o rsync .
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.
Não use cp. Use o rsync .
cp não não excluir arquivos.
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.)
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.
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.
A solução Erics funcionou, mas eu tive que ajustar um pouco a sintaxe:
$ cd dirA
$ tar -cf - ./* | (cd .../dirB ; tar -xf -)
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.