Depois de migrar para o Linux a partir do Windows, gostaria de encontrar um software alternativo para o Winmerge ou, melhor ainda, aprender ferramentas de linha de comando para comparar e sincronizar duas pastas no Linux. Ficaria muito grato se você pudesse me dizer como executar as seguintes tarefas na linha de comando ... (Estudei diff e rsync, mas ainda preciso de ajuda.)
Temos duas pastas: "/ home / user / A" e "/ home / user / B"
A pasta A é o local em que arquivos e pastas regulares são salvos e a pasta B é uma pasta de backup que serve como um espelho completo da pasta A. (Nada é salvo ou modificado diretamente pelo usuário na pasta B.)
Minhas perguntas são:
Como listar arquivos que existem apenas na pasta B? (Por exemplo, os excluídos da pasta A desde a última sincronização.)
Como copiar arquivos que existem apenas na pasta B novamente na pasta A?
Como listar os arquivos existentes nas duas pastas, mas com carimbos de data e hora diferentes? (Os que foram modificados na pasta A desde a última sincronização. Gostaria de evitar o uso de somas de verificação, porque existem dezenas de milhares de arquivos e isso tornaria o processo muito lento.)
Como fazer uma cópia exata da pasta A na pasta B? Quero dizer, copie tudo da pasta A para a pasta B que existe apenas na pasta A e exclua tudo da pasta B que existe apenas na pasta B, mas sem tocar nos arquivos iguais nas duas pastas.
fonte
Respostas:
Isso coloca a pasta A na pasta B:
Se você deseja que o conteúdo das pastas A e B seja o mesmo, coloque
/home/user/A/
(com a barra) a fonte. Isso não pega a pasta A, mas todo o seu conteúdo e coloca-a na pasta B. Assim:-a
Faça a sincronização preservando todos os atributos do sistema de arquivos-v
executar verbalmente-u
somente copie arquivos com uma hora de modificação mais recente (ou diferença de tamanho se os horários forem iguais)--delete
exclua os arquivos na pasta de destino que não existem na fontePágina de manual: https://download.samba.org/pub/rsync/rsync.html
fonte
/home/user/B/A
vez de substituir o conteúdo de A pelo conteúdo de B. Você poderia me ajudar a dar uma olhada?Você poderia
unison
ferramenta desenvolvida por Benjamin Pierce na U Penn.Vamos supor que você tenha dois diretórios,
/home/user/Documents/dirA/
e/home/user/Documents/dirB/
Para sincronizar esses dois, você pode usar:
~ $
unison -ui text /home/user/Documents/dirA/ /home/user/Documents/dirB/
Na saída,
unison
exibirá todos os diretórios e arquivos diferentes nos dois diretórios que você pediu para sincronizar. Ele recomendará sincronizar (replicar o arquivo ausente nos dois locais) de forma aditiva na execução inicial, criar e manter uma árvore de sincronização em sua máquina e, nas execuções subsequentes, implementará a sincronização verdadeira (ou seja, se você excluir um arquivo.../dirA
, vai ficar excluído do.../dirB
bem. Você também pode comparar cada mudança e, opcionalmente, optar por encaminhar ou reverter sincronizar entre os dois diretórios.Opcionalmente, para iniciar a interface gráfica, basta remover a
-ui text
opção do seu comando, embora eu ache ocli
mais simples e rápido de usar.Mais sobre isso: tutorial do Unison na documentação do usuário do Unison .
fonte
A resposta do TuxForLife é muito boa, mas eu sugiro que você use
-c
ao sincronizar localmente. Você pode argumentar que não vale a pena a penalidade de tempo / rede para fazer sincronizações remotas, mas vale totalmente a pena para arquivos locais, porque a velocidade é muito alta.Isso mostra como ter o mesmo tamanho e carimbos de hora pode falhar.
A configuração
O rsync que não copia nada porque todos os arquivos têm o mesmo tamanho e carimbo de data e hora
O rsync que funciona corretamente porque compara somas de verificação
fonte
É isso que estou usando para fazer backup de arquivos pessoais, nos quais não me importo com tudo o que é coberto
-a
e quero que informações mais úteis sejam impressas.Na página do manual rsync :
De
rsync --info=help
Embora menos explícito, isso é aparentemente equivalente e mais curto:
fonte
Não é exatamente o mesmo que você solicita, mas você pode considerar usar uma ferramenta de controle de versão. Ferramentas como o Git fazem tudo o que você pede e muito mais, especialmente se você não trabalha diretamente na pasta B, pode ser interessante dar uma olhada. você pode encontrar mais informações sobre o git aqui
fonte
Você pode usá-lo desta maneira:
Dessa forma, você copiará o conteúdo da pasta A para a pasta B, não o conteúdo da própria pasta A.
fonte