Comment RSYNC un seul fichier?

94

Actuellement, je ne RSync-ing Directoriesque comme:

* * * * * rsync -avz /var/www/public_html/images root@<remote-ip>:/var/www/public_html

Alors, comment puis-je rsyncun seul fichier comme /var/www/public_html/.htaccess,?

夏 期 劇場
la source

Réponses:

158

Vous le faites de la même manière que vous le feriez pour un répertoire, mais vous spécifiez le chemin complet du nom de fichier comme source. Dans votre exemple:

rsync -avz   --progress  /var/www/public_html/.htaccess root@<remote-ip>:/var/www/public_html/
Michael Place
la source
19
De plus, si vous n'envoyez qu'un seul fichier, vous pouvez ajouter le paramètre "--progress" pour pouvoir observer sa progression.
JoshStrange
cela signifie-t-il que vous avez toujours besoin d'un module dans rsyncd.conf avec un répertoire au-dessus du fichier (par exemple avec l'option de refuser la suppression), ou pouvez-vous télécharger des fichiers n'importe où sur le serveur en spécifiant simplement son chemin? La page de manuel n'est pas vraiment claire à ce sujet.
2
-a inclut récursif et cela n'est pas nécessaire pour un seul fichier, je ne sais pas si j'utiliserais cet indicateur pour un seul fichier car cela peut conduire à un comportement involontaire si le nom de fichier devient par accident un répertoire.
redanimalwar
2
--partial --stats --progress << Ces indicateurs sont utiles s'il s'agit d'un fichier vraiment volumineux et peuvent devoir être repris après un transfert interrompu.
Ahi Tuna le
16

Syntaxe de base

rsync options source destination

Exemple

rsync -az /var/www/public_html/filename root@<remote-ip>:/var/www/public_html

Lire la suite

Technicien
la source
14

La réponse de Michael Place fonctionne très bien si, par rapport au répertoire racine de la source et de la cible, tous les répertoires dans le chemin du fichier existent déjà.

Mais que faire si vous souhaitez synchroniser un fichier avec ce chemin source:

/ source-root / a / b / fichier

vers un fichier avec le chemin cible suivant:

/ racine-cible / a / b / fichier

et les répertoires a et b n'existent pas?

Vous devez exécuter une commande rsync comme celle-ci:

rsync -r --include="/a/" --include="/a/b/" --include="/a/b/file" --exclude="*" [source] [target]
Kenny Evitt
la source
2
Ne serait-il pas plus sûr de simplement copier le fichier individuel dans un dossier existant ou de créer les dossiers à l'avance? En cas de synchronisation du contenu d'un dossier ou d'un dossier, rsync crée tous les sous-dossiers, après tout, c'est son travail, mais dans ce cas particulier, les paramètres --include sont trop compliqués et compliqués juste pour copier des fichiers individuels.
Tulains Córdova
@ user1598390 Je ne sais pas quel scénario vous supposez, ou imaginez, où cela serait moins sûr, mais si vous essayiez de vous souvenir de la forme spécifique de cette commande et que vous ne l'avez pas fait fréquemment, alors oui, c'est probablement moins sûr que de copier le fichier unique. Cela peut être plus sûr si le fichier est volumineux, c'est-à-dire parce que rsync gère automatiquement la plupart des erreurs pouvant survenir lors de la copie. Pour certains contextes, ma syntaxe était particulièrement utile pour moi car j'avais écrit du code qui générait des commandes sous cette forme, donc, étant donné des tests suffisants couvrant le code pertinent, ces commandes sont «sûres».
Kenny Evitt le
0

À ce jour, deux des réponses ne sont pas tout à fait exactes, ils obtiendront plus d'un fichier, et l'autre n'est pas aussi simple que cela pourrait être, voici une réponse plus simple IMO.

Ce qui suit obtient exactement un fichier, mais vous devez créer le répertoire dest avec mkdir. C'est probablement l'option la plus rapide:

mkdir -p ./local/path/to/file
rsync user@remote:/remote/path/to/file/ -zarv --include "filename" --exclude "*" ./local/path/to/file/

S'il n'y a qu'une seule instance de fichier dans / remote / path, rsync peut créer des répertoires pour vous si vous procédez comme suit. Cela prendra probablement un peu plus de temps car il recherche plus de répertoires. De plus, cela créera des répertoires vides pour les répertoires dans / remote / path qui ne sont pas dans ./local

cd ./local
rsync user@remote:/remote/path -zarv --include "*/" --include "filename" --exclude "*" .

Gardez à l'esprit que l'ordre de --include et --exclude est important.

Samuel
la source