Linux equivalente a robocopy?


34

È un po 'divertente, ci sono molti modi in cui gli strumenti della riga di comando di Linux sono di gran lunga superiori a quelli di Windows, ma una cosa che non ho trovato equivalente è Robocopy . Robocopy è molto più versatile di cp, e non riesco a capire come fare ciò che voglio con gli strumenti di Linux.

Un caso d'uso specifico è che ho due directory con file per lo più simili, ma uno ha file di origine più recenti e uno ha file di contenuto che l'altra directory non ha, e possibilmente file di origine più recenti (per un sito Web). Voglio copiare i file da quest'ultima directory nella prima, aggiungendo nuovi file di contenuto e simili, ma non sovrascrivendo i file più recenti nella directory di destinazione.

Ho provato a capire come farlo in Linux per circa mezz'ora, ho deciso che probabilmente avrei dovuto imparare lo script bash o qualcosa per fare quello che volevo, e poi ho capito che avrei potuto usare solo il robocopy. Avevo anche altri requisiti. In pratica stavo convertendo un sito Web Python (Django) da un repository SVN in un repository Git e volevo assicurarmi di non aver apportato modifiche senza commit a SVN. Tuttavia, volevo escludere condizionalmente le .svndirectory e i .pycfile Python compilati. Il seguente comando robocopy fa esattamente quello che voglio:

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

C'è qualche equivalente a Robocopy in Linux? Ho esaminato rsyncbrevemente, ma sembrava che avrei dovuto configurare un server rsync prima di provare a sincronizzare le cartelle.


1
Non è necessario configurare un server rsync, rsync su ssh esegue automaticamente rsync sulla macchina remota in modalità server (in un modo che viene utilizzato solo per quella connessione, eseguito con il proprio account e chiuso automaticamente al termine) .
CesarB,

"... ma sembrava che avrei dovuto configurare un server rsync prima di provare a sincronizzare le cartelle." Ho usato Rsync per anni e non ho mai dovuto installare un server Rsync formale. In effetti molti strumenti di sincronizzazione / backup su macOS utilizzano Rsync come core senza la necessità di configurare un server come Carbon Copy Cloner e — credo — SuperDuper!
Jake:

Risposte:


38

Sembra che rsync sia sicuramente quello che stai cercando. Non è necessario configurare un "server rsync" per copiare i file da una macchina all'altra. Rsync supporta la copia di file su SFTP (SSH File Transfer) che la maggior parte dei box linux ha già abilitato (se non disabilitato manualmente).

Vedi i file Mirror di Lifehacker su tutti i sistemi con rsync per maggiori dettagli:

Sia che tu voglia eseguire il backup dei tuoi dati, distribuire i file in modo sicuro o eseguire il mirroring dei tuoi documenti di lavoro su Internet dall'ufficio a casa, tra i computer della tua rete locale o dal tuo computer al tuo server web, rsync può fare il lavoro. Oggi useremo rsync per eseguire il mirroring delle cartelle tra un Mac e un PC tramite una connessione protetta dalla riga di comando.

Rsync è gratuito (come nel parlato) e multipiattaforma, il che significa che sincronizza i file tra i sistemi operativi (Windows / Cygwin, Mac OS, Linux); funziona su SSH, quindi è crittografato e sicuro; a differenza di FTP è incrementale , quindi vengono trasferite solo le parti dei file modificati , non interi file , il che lo fa andare come Speedy Gonzalez; e il fatto che sia a riga di comando lo rende programmabile e facilmente automatizzabile.


Leggi la pagina man di rsync - per usare ssh (senza un server rsync esplicito) userai "-e ssh"
Doug Harris,

1
rsync è fantastico! E non è necessario utilizzare -e poiché qualsiasi percorso come user@host.com: / blah / lo utilizzerà automaticamente.
The How-To Geek,

Mmm, va bene. Quindi può usare una scpsintassi fondamentalmente simile per trasferire su ssh? In realtà stavo cercando di trasferire file su una macchina, ma è buono a sapersi.
Ibrahim,

1
Sfortunatamente, questa risposta non è del tutto corretta: sebbene utilizzi SSH, non utilizza SFTP. Al contrario, comunica direttamente con l'istanza rsync remota utilizzando il protocollo rsync.
Daniel B,

15

rsync copia i file da una directory a un'altra directory sulla stessa macchina come robocopy. Ecco il comando rsync equivalente al comando robocopy:

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

Ciò copierà in modo ricorsivo l'origine nella destinazione ed escluderà i file più vecchi così come le directory / file '.svn' e '* .pyc'.


Tranne che lo farà in un unico modo thread, che può portare a un aumento delle prestazioni di oltre 5 volte a seconda della quantità di riferimento indiretto nella soluzione di archiviazione.
Mikhail,

Quando un file viene eliminato dalla sorgente, non viene sincronizzato con la destinazione.
Jirong Hu,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.