Linux equivalente a robocopy?

34

É meio engraçado, existem várias maneiras pelas quais as ferramentas de linha de comando do Linux são muito superiores às do Windows, mas uma coisa que eu não encontrei equivalente é a robocópia . Robocopy é muito mais versátil do que cp, e não consigo descobrir como fazer o que quero com as ferramentas do Linux.

Um caso de uso específico é que eu tenho dois diretórios com arquivos semelhantes, mas um possui arquivos de origem mais novos e um possui arquivos de conteúdo que o outro diretório não possui e possivelmente arquivos de origem mais novos (para um site). Quero copiar os arquivos desse último diretório para o anterior, adicionando novos arquivos de conteúdo e outros, mas não substituindo os arquivos mais recentes no diretório de destino.

Tentei descobrir como fazer isso no Linux por talvez meia hora, decidi que provavelmente teria que aprender scripts bash ou algo para fazer o que queria e depois percebi que poderia usar apenas a robocópia. Eu também tinha alguns outros requisitos. Eu estava basicamente convertendo um site Python (Django) de um repositório SVN para um repositório Git, e queria ter certeza de que não havia alterações não confirmadas no SVN. No entanto, eu queria excluir condicionalmente os .svndiretórios e os .pycarquivos Python compilados. O seguinte comando robocopy faz exatamente o que eu quero:

robocopy source destination /XO /E /XD .svn /XF *.pyc

Existe algum equivalente ao Robocopy no Linux? Examinei rsyncbrevemente, mas parecia que eu teria que configurar um servidor rsync antes de tentar sincronizar as pastas.

Ibrahim
fonte
1
Você não precisa configurar um servidor rsync, o rsync over ssh executa automaticamente o rsync na máquina remota no modo servidor (de uma maneira que é usada apenas para essa conexão, sendo executada em sua própria conta e fechando automaticamente quando terminar) .
CesarB
“… Mas parecia que eu teria que configurar um servidor rsync antes de tentar sincronizar as pastas.” Eu uso o Rsync há anos e nunca tive que configurar um servidor formal de Rsync. De fato, muitas ferramentas de sincronização / backup no macOS usam o Rsync como núcleo, sem a necessidade de configurar um servidor como o Carbon Copy Cloner e - acredito - o SuperDuper!
JakeGould

Respostas:

38

Parece que o rsync é definitivamente o que você procura. Você não precisa configurar um 'servidor rsync' para copiar arquivos de uma máquina para outra. O Rsync suporta a cópia de arquivos por SFTP (SSH File Transfer), que a maioria das caixas Linux já ativou (se não for desativada manualmente).

Consulte os arquivos Mirror do Lifehacker nos sistemas com rsync para obter mais detalhes:

Se você deseja fazer backup de seus dados, distribuir arquivos com segurança ou espelhar seus documentos de trabalho pela internet do escritório para casa, entre computadores na rede local ou do computador para o servidor da web, o rsync pode fazer o trabalho. Hoje, usaremos o rsync para espelhar pastas entre um Mac e um PC através de uma conexão segura na linha de comando.

O Rsync é gratuito (como na fala) e multiplataforma, o que significa que sincroniza arquivos entre sistemas operacionais (Windows / Cygwin, Mac OS, Linux); funciona sobre ssh, portanto, é criptografado e seguro; ao contrário do FTP, é incremental ; portanto, apenas as partes dos arquivos alterados são transferidas, e não os arquivos inteiros , o que faz com que seja como Speedy Gonzalez; e o fato de ser sua linha de comando torna o script e a automação fácil.

Josh Hunt
fonte
Leia a página man rsync - para uso ssh (w / o de um servidor rsync explícito) que você vai usar "ssh -e"
Doug Harris
1
rsync é incrível! E você não precisa usar -e, pois qualquer caminho como [email protected]: / blah / o utilizará automaticamente.
The How-To Geek
Mmm, isso é legal. Portanto, ele pode usar scpsintaxe basicamente semelhante à transferência pelo ssh? Na verdade, eu estava tentando transferir arquivos em uma máquina, mas é bom saber.
Ibrahim
1
Infelizmente, esta resposta não está totalmente correta: embora ela use SSH, ela não usa SFTP. Em vez disso, ele se comunica com a instância remota do rsync diretamente usando o protocolo rsync.
Daniel B
15

O rsync copiará arquivos de um diretório para outro diretório na mesma máquina como robocopy. Aqui está o comando rsync que é equivalente ao seu comando robocopy:

rsync -auv --exclude '.svn' --exclude '*.pyc' source destination

Isso copiará recursivamente a fonte para o destino e excluirá arquivos mais antigos, além dos diretórios / arquivos '.svn' e '* .pyc'.

Sean Staats
fonte
Exceto que o fará de uma maneira única, o que pode resultar em mais de cinco vezes o desempenho, dependendo da quantidade de indireção na sua solução de armazenamento.
22817 Mikhail
Quando um arquivo é excluído da fonte, ele não é sincronizado com o destino.
precisa