Como faço para mesclar com segurança dois diretórios usando comandos no Solaris (e OSX)?

2

Os diretórios A e B têm muitos subdiretórios com conteúdo quase idêntico. O diretório B pode ter arquivos mais novos e alguns subdiretórios que o diretório A não possui. Quando os arquivos no Diretório B são mais recentes, eu quero que eles sobrescrevam aqueles em A. Quando B contém subdiretórios que A não possui, eu quero que os diretórios B sejam mesclados nos resultados. Então, eu acho que tudo que estou dizendo é que eu preciso mesclar dois diretórios usando comandos disponíveis no Solaris e OSX. Estou trabalhando localmente no OSX, mas precisarei executar o mesmo procedimento em uma caixa do Solaris. Eu encontrei algumas técnicas. A primeira abordagem é usar o tar:

cd A
tar -cvf content.tar *
cp content.tar ../B
tar -uvf content.tar *
cp content.tar ../
mv A A_backup; mv B B_backup
tar -xvf content.tar

(Uau! isso parece confuso)

Outra abordagem:

cd B
tar cf - . |(cd ../A; tar xvf -)

(Isso mescla tudo em A)

O problema que tenho com ambos talvez seja principalmente uma questão de confiança. Eu não estou familiarizado com os métodos e realmente não consigo ver o que está acontecendo. Não consigo ver quais arquivos foram sobrescritos ou quais pastas ou arquivos existiam em B que não existiam em A.

Existe uma maneira melhor?

    
por Michael Prescott 31.05.2011 / 22:12

2 respostas

2

Acontece que o rsync pode ser usado para diretórios locais.

rsync -av B A
    
por 31.05.2011 / 22:15
0

O Mac OS X tem ditto :

ditto [-v] [-V] [-X] [<options>] src ... dst_directory

In its first form, ditto copies one or more source files or directories to a destination directory. If the destination directory does not exist it will be created before the first source is copied. If the destination directory already exists then the source directories are merged with the previous contents of the destination.

    
por 01.06.2011 / 16:06