Você tem três pastas:
- pasta atual , que contém seus arquivos atuais
- pasta antiga , que contém uma versão mais antiga dos mesmos arquivos
- diferença de pasta , que é apenas uma pasta vazia
Como você compara o antigo com o atual e copia os arquivos que são diferentes (ou inteiramente novos) da atual para a diferença ?
Eu pesquisei ao redor e parece uma coisa simples de resolver, mas não consigo fazê-lo funcionar no meu exemplo particular. A maioria das fontes sugeriu o uso do rsync, então acabei com o seguinte comando:
rsync -ac --compare-dest=../old/ new/ difference/
O que isso faz, no entanto, é copiar todos os arquivos de novos para diferentes , mesmo aqueles que são iguais aos antigos .
Caso isso ajude (talvez o comando esteja correto e a falha esteja em outro lugar), foi assim que eu testei isso:
- Eu fiz as três pastas.
- Criei vários arquivos de texto com conteúdos diferentes no passado .
- Copiei os arquivos do antigo para o novo .
- Alterei o conteúdo de alguns arquivos em novo e adicionei alguns arquivos adicionais.
- Eu executei o comando acima e verifiquei os resultados em diferença .
Estive procurando uma solução nos últimos dois dias e realmente aprecio alguma ajuda. Não precisa necessariamente estar usando o rsync, mas eu gostaria de saber o que estou fazendo de errado, se possível.
Respostas:
Não tenho certeza se você pode fazê-lo com qualquer comando linux existente, como rsync ou diff. Mas, no meu caso, tive que escrever meu próprio script usando Python, pois o python possui o módulo "filecmp" para comparação de arquivos. Publiquei todo o script e uso em meu site pessoal - http://linuxfreelancer.com/
Seu uso é simples - forneça o caminho absoluto do novo diretório, diretório antigo e diretório de diferenças nessa ordem.
fonte
Eu descobri qual era o problema no meu caso:
Os arquivos que eu estava comparando tinham timestamps diferentes. Eu não deveria ter usado o argumento -a , presumo que o rsync estava tentando preservar os carimbos de data e hora ao copiar arquivos. O comando que funcionou para mim foi:
fonte
rsync -a
para "copiar" os arquivos inicialmente (ou o equivalente em cp) e depois excluído ou modificado. (Gosto de manter o rsync porque sei que é auto-consistente sem pensar no que pode estar fazendo.) Acho que deveria ter funcionado com o comando original. A opção -a inclui -t (comparar por carimbo de data / hora), que é a alternativa para -c (comparar por soma de verificação).old/
enew/
.Isso pode ajudar alguns leitores: No Windows, um pequeno programa mais antigo e gratuito - Third Dir - faz exatamente o que está sendo solicitado aqui. Já não está disponível através do desenvolvedor, Robert Vašíček. Mas tenho certeza que pode ser encontrado através de alguns repositórios online.
Aqui está a descrição do desenvolvedor, que permanece em seu site:
Terceiro diretório: um incomum sincronizador de diretório - os diferentes arquivos são copiados para o terceiro diretório. É muito útil extrair, por exemplo, fotos novas ou editadas de uma grande árvore de diretórios no disco fixo para uma pasta temporária e adicioná-las ao CD de arquivo (nota - os arquivos originais são comparados com o CD). Versão 1.4, tamanho 23kB. Criado 2005-02-12.
Histórico: Versão 1.14 - Mais eficiente quando são comparados muitos dez dos milhares de arquivos.
fonte
A maneira rsync dada por Thane com as adições de Yamaneko funciona muito bem, mas deixa diretórios vazios. Para mim, a solução final foi em duas etapas, primeiro chame o rsync com caminho completo e, em seguida, um comando find para remover todos os diretórios vazios:
Observe que mesmo com a opção --links, o rsync não manteve links simbólicos, mas copiou os dados de destino.
fonte
-empty -exec rmdir {} \;
você pode usar-empty -delete
.Eu uso o dualpane XY Explorer (comercial), que pode fazer muitos truques e esse é um deles. Abra
Current
em um painel e Antigo no outro. Ative o painel Atual. Vá para Painéis > Seleção de sincronização . Oferece 5 opções para você selecionar:Agora você pode copiar a seleção resultante de
Current
onde quiser. Usei-o para compararmailfolders
as instalações antigas com as mais recentes. A estrutura da pasta era bastante complexa, mas (quase) todasmbs-files
tinham um número único.Por isso, fiz uma pesquisa na
mbs-files
raiz antigamailfolder
(em um painel) e na mais nova (no outro painel) e fiz uma comparação nos resultados da pesquisa em cada painel ( Seleção de sincronização exclusiva) , para encontrar e-mails perdidos durante reinstala)! Você também pode definir muitas opções.fonte