compara duas árvores de diretórios

5

Eu tenho duas bibliotecas de músicas, uma versão mais recente que a outra. Eu gostaria de compará-los para descobrir quais arquivos eu preciso copiar da nova árvore de música para o antigo.

Eu tentei diff --brief -r /oldmusicdir/ /newmusicdir/ com base na sugestão de outro usuário, mas ^ C o processo depois de quinze minutos (eu acho que o diff está digitalizando os próprios arquivos de música - o que não é necessário).

Então eu tentei find /oldmusicdir/ -type d | sort > oldmusicdir para o antigo e o novo, depois executei diff oldmusicdir newmusicdir No entanto, desde que eu armazenei os diretórios de música em locais separados, cada entrada foi marcada.

Em seguida, tentei executar find /musicdir/ -type d | basename -s - | sort > musicdir , mas meu arquivo musicdir simplesmente leu "-"

Alguém sabe como obter o basename para aceitar o STDIN? Ou alguém tem uma maneira melhor de comparar rapidamente dois diretórios de música?

Obrigado!

    
por curios 28.03.2014 / 04:20

2 respostas

7

O utilitário rsync apareceu em minha mente quando vi sua pergunta. Fazer algo como abaixo pode mostrar rapidamente quais arquivos estão no diretório a , mas não em b :

$ rsync -rcnv a/* b/

-r will recurse into the directories
-c will compare based on file checksum
-n will run it as a "dry run" and make no changes, but just print out the files 
   that would be updated
-v will print the output to stdout verbosely

Esta é uma boa opção porque você pode comparar o conteúdo dos arquivos também para garantir que eles correspondam. O algoritmo delta de rsync é otimizado para esse tipo de caso de uso. Então, se você quiser que b corresponda ao conteúdo de a , basta remover a opção -n para realizar a sincronização real.

Algumas perguntas relacionadas:

por 28.03.2014 / 05:13
0

Que tal gerar uma listagem de diretórios recursivos de cada diretório em arquivos separados e, em seguida, usar diff nesses dois arquivos?

    
por 28.03.2014 / 04:33

Tags