Linux équivalent à robocopy?

34

C'est assez drôle, il existe de nombreuses façons dont les outils de ligne de commande Linux sont largement supérieurs à ceux de Windows, mais je n'ai pas trouvé d'équivalent à robocopy . Robocopy est beaucoup plus polyvalent que cp, et je ne sais pas comment faire ce que je veux avec des outils Linux.

Un cas d'utilisation spécifique est que j'ai deux répertoires avec des fichiers principalement similaires, mais l'un a des fichiers source plus récents et un a des fichiers de contenu que l'autre répertoire n'a pas, et éventuellement des fichiers source plus récents (pour un site Web). Je veux copier les fichiers de ce dernier répertoire dans le premier, en ajoutant de nouveaux fichiers de contenu et autres, mais sans écraser les fichiers plus récents dans le répertoire de destination.

J'ai essayé de comprendre comment faire cela sous Linux pendant peut-être une demi-heure, j'ai décidé que je devrais probablement apprendre le script bash ou quelque chose pour faire ce que je voulais, puis j'ai réalisé que je pouvais simplement utiliser robocopy. J'avais également d'autres exigences. Je convertissais essentiellement un site Web Python (Django) d'un référentiel SVN en un référentiel Git, et je voulais m'assurer que je n'avais pas de modifications non validées dans SVN. Cependant, je voulais exclure conditionnellement les .svnrépertoires et les .pycfichiers Python compilés. La commande robocopy suivante fait exactement ce que je veux:

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

Existe-t-il un équivalent de Robocopy sous Linux? J'ai examiné rsyncbrièvement, mais il semblait que je devrais configurer un serveur rsync avant d'essayer de synchroniser les dossiers.

Ibrahim
la source
1
Vous n'avez pas besoin de configurer un serveur rsync, rsync sur ssh exécute automatiquement rsync sur la machine distante en mode serveur (d'une manière qui n'est utilisée que pour cette connexion, s'exécutant sous votre propre compte et se fermant automatiquement quand c'est fait) .
CesarB
«… Mais il me semblait que je devrais configurer un serveur rsync avant d'essayer de synchroniser les dossiers.» J'utilise Rsync depuis des années et je n'ai jamais eu à configurer un serveur Rsync formel. En fait, de nombreux outils de synchronisation / sauvegarde sur macOS utilisent Rsync comme cœur sans avoir besoin de configurer un serveur tel que Carbon Copy Cloner et — je crois — SuperDuper!
JakeGould

Réponses:

38

Il semble que rsync soit définitivement ce que vous recherchez. Vous n'avez pas besoin de configurer un «serveur rsync» pour copier des fichiers d'une machine à une autre. Rsync prend en charge la copie de fichiers via SFTP (SSH File Transfer) que la plupart des boîtes Linux ont déjà activées (si elles ne sont pas désactivées manuellement).

Voir les fichiers Mirror de Lifehacker sur les systèmes avec rsync pour plus de détails:

Que vous souhaitiez sauvegarder vos données, distribuer des fichiers en toute sécurité ou mettre en miroir vos documents de travail sur Internet du bureau à la maison, entre les ordinateurs de votre réseau local ou de votre ordinateur à votre serveur Web, rsync peut faire le travail. Aujourd'hui, nous utiliserons rsync pour mettre en miroir des dossiers entre un Mac et un PC via une connexion sécurisée sur la ligne de commande.

Rsync est gratuit (comme dans le discours) et multiplateforme, ce qui signifie qu'il synchronise les fichiers entre les systèmes d'exploitation (Windows / Cygwin, Mac OS, Linux); il fonctionne sur ssh donc il est crypté et sécurisé; contrairement au FTP, il est incrémentiel , donc seules les parties des fichiers modifiés sont transférées, pas les fichiers entiers , ce qui le fait fonctionner comme Speedy Gonzalez; et le fait que ce soit en ligne de commande le rend scriptable et facilement automatisé.

Josh Hunt
la source
Lisez la page de manuel de rsync - pour utiliser ssh (sans un serveur rsync explicite), vous utiliserez "-e ssh"
Doug Harris
1
rsync est génial! Et vous n'avez pas besoin d'utiliser -e car n'importe quel chemin comme [email protected]: / blah / l'utilisera automatiquement.
The How-To Geek
Mmm, c'est cool. Donc, il peut utiliser une scpsyntaxe essentiellement similaire pour le transfert via ssh? J'essayais en fait de transférer des fichiers sur une machine, mais c'est bon à savoir.
Ibrahim
1
Malheureusement, cette réponse n'est pas entièrement correcte: bien qu'elle utilise SSH, elle n'utilise pas SFTP. Au lieu de cela, il communique directement avec l'instance rsync distante à l'aide du protocole rsync.
Daniel B
15

rsync copiera les fichiers d'un répertoire vers un autre répertoire sur la même machine comme robocopy. Voici la commande rsync qui équivaut à votre commande robocopy:

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

Cela copiera récursivement la source vers la destination et exclura les fichiers plus anciens ainsi que les répertoires / fichiers '.svn' et '* .pyc'.

Sean Staats
la source
Sauf qu'il le fera d'une manière à un seul thread, ce qui peut entraîner une baisse des performances de plus de 5x selon la quantité d'indirection dans votre solution de stockage.
Mikhail
Lorsqu'un fichier est supprimé de la source, il n'est pas synchronisé avec la destination.
Jirong Hu