-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathrsync.1
5067 lines (5063 loc) · 228 KB
/
rsync.1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
.TH "rsync" "1" "6 Apr 2024" "rsync 3.3.0" "User Commands"
.\" prefix=/usr
.P
.SH "NAME"
.P
rsync \- a fast, versatile, remote (and local) file-copying tool
.P
.SH "SYNOPSIS"
.P
.nf
Local:
rsync [OPTION...] SRC... [DEST]
Access via remote shell:
Pull:
rsync [OPTION...] [USER@]HOST:SRC... [DEST]
Push:
rsync [OPTION...] SRC... [USER@]HOST:DEST
Access via rsync daemon:
Pull:
rsync [OPTION...] [USER@]HOST::SRC... [DEST]
rsync [OPTION...] rsync://[USER@]HOST[:PORT]/SRC... [DEST]
Push:
rsync [OPTION...] SRC... [USER@]HOST::DEST
rsync [OPTION...] SRC... rsync://[USER@]HOST[:PORT]/DEST)
.fi
.P
Usages with just one SRC arg and no DEST arg will list the source files instead
of copying.
.P
The online version of this manpage (that includes cross-linking of topics)
is available at
.UR https://download.samba.org/pub/rsync/rsync.1
.UE .
.P
.SH "DESCRIPTION"
.P
Rsync is a fast and extraordinarily versatile file copying tool. It can copy
locally, to/from another host over any remote shell, or to/from a remote rsync
daemon. It offers a large number of options that control every aspect of its
behavior and permit very flexible specification of the set of files to be
copied. It is famous for its delta-transfer algorithm, which reduces the
amount of data sent over the network by sending only the differences between
the source files and the existing files in the destination. Rsync is widely
used for backups and mirroring and as an improved copy command for everyday
use.
.P
Rsync finds files that need to be transferred using a "quick check" algorithm
(by default) that looks for files that have changed in size or in last-modified
time. Any changes in the other preserved attributes (as requested by options)
are made on the destination file directly when the quick check indicates that
the file's data does not need to be updated.
.P
Some of the additional features of rsync are:
.P
.IP o
support for copying links, devices, owners, groups, and permissions
.IP o
exclude and exclude-from options similar to GNU tar
.IP o
a CVS exclude mode for ignoring the same files that CVS would ignore
.IP o
can use any transparent remote shell, including ssh or rsh
.IP o
does not require super-user privileges
.IP o
pipelining of file transfers to minimize latency costs
.IP o
support for anonymous or authenticated rsync daemons (ideal for mirroring)
.P
.SH "GENERAL"
.P
Rsync copies files either to or from a remote host, or locally on the current
host (it does not support copying files between two remote hosts).
.P
There are two different ways for rsync to contact a remote system: using a
remote-shell program as the transport (such as ssh or rsh) or contacting an
rsync daemon directly via TCP. The remote-shell transport is used whenever the
source or destination path contains a single colon (:) separator after a host
specification. Contacting an rsync daemon directly happens when the source or
destination path contains a double colon (::) separator after a host
specification, OR when an rsync:// URL is specified (see also the USING
RSYNC-DAEMON FEATURES VIA A REMOTE-SHELL CONNECTION section for an
exception to this latter rule).
.P
As a special case, if a single source arg is specified without a destination,
the files are listed in an output format similar to "\fBls\ \-l\fP".
.P
As expected, if neither the source or destination path specify a remote host,
the copy occurs locally (see also the \fB\-\-list-only\fP option).
.P
Rsync refers to the local side as the client and the remote side as the server.
Don't confuse server with an rsync daemon. A daemon is always a server, but a
server can be either a daemon or a remote-shell spawned process.
.P
.SH "SETUP"
.P
See the file README.md for installation instructions.
.P
Once installed, you can use rsync to any machine that you can access via a
remote shell (as well as some that you can access using the rsync daemon-mode
protocol). For remote transfers, a modern rsync uses ssh for its
communications, but it may have been configured to use a different remote shell
by default, such as rsh or remsh.
.P
You can also specify any remote shell you like, either by using the \fB\-e\fP
command line option, or by setting the \fBRSYNC_RSH\fP environment variable.
.P
Note that rsync must be installed on both the source and destination machines.
.P
.SH "USAGE"
.P
You use rsync in the same way you use rcp. You must specify a source and a
destination, one of which may be remote.
.P
Perhaps the best way to explain the syntax is with some examples:
.RS 4
.P
.nf
rsync -t *.c foo:src/
.fi
.RE
.P
This would transfer all files matching the pattern \fB*.c\fP from the current
directory to the directory src on the machine foo. If any of the files already
exist on the remote system then the rsync remote-update protocol is used to
update the file by sending only the differences in the data. Note that the
expansion of wildcards on the command-line (\fB*.c\fP) into a list of files is
handled by the shell before it runs rsync and not by rsync itself (exactly the
same as all other Posix-style programs).
.RS 4
.P
.nf
rsync -avz foo:src/bar /data/tmp
.fi
.RE
.P
This would recursively transfer all files from the directory src/bar on the
machine foo into the /data/tmp/bar directory on the local machine. The files
are transferred in archive mode, which ensures that symbolic links, devices,
attributes, permissions, ownerships, etc. are preserved in the transfer.
Additionally, compression will be used to reduce the size of data portions of
the transfer.
.RS 4
.P
.nf
rsync -avz foo:src/bar/ /data/tmp
.fi
.RE
.P
A trailing slash on the source changes this behavior to avoid creating an
additional directory level at the destination. You can think of a trailing /
on a source as meaning "copy the contents of this directory" as opposed to
"copy the directory by name", but in both cases the attributes of the
containing directory are transferred to the containing directory on the
destination. In other words, each of the following commands copies the files
in the same way, including their setting of the attributes of /dest/foo:
.RS 4
.P
.nf
rsync -av /src/foo /dest
rsync -av /src/foo/ /dest/foo
.fi
.RE
.P
Note also that host and module references don't require a trailing slash to
copy the contents of the default directory. For example, both of these copy
the remote directory's contents into "/dest":
.RS 4
.P
.nf
rsync -av host: /dest
rsync -av host::module /dest
.fi
.RE
.P
You can also use rsync in local-only mode, where both the source and
destination don't have a ':' in the name. In this case it behaves like an
improved copy command.
.P
Finally, you can list all the (listable) modules available from a particular
rsync daemon by leaving off the module name:
.RS 4
.P
.nf
rsync somehost.mydomain.com::
.fi
.RE
.P
.SH "COPYING TO A DIFFERENT NAME"
.P
When you want to copy a directory to a different name, use a trailing slash on
the source directory to put the contents of the directory into any destination
directory you like:
.RS 4
.P
.nf
rsync -ai foo/ bar/
.fi
.RE
.P
Rsync also has the ability to customize a destination file's name when copying
a single item. The rules for this are:
.P
.IP o
The transfer list must consist of a single item (either a file or an empty
directory)
.IP o
The final element of the destination path must not exist as a directory
.IP o
The destination path must not have been specified with a trailing slash
.P
Under those circumstances, rsync will set the name of the destination's single
item to the last element of the destination path. Keep in mind that it is best
to only use this idiom when copying a file and use the above trailing-slash
idiom when copying a directory.
.P
The following example copies the \fBfoo.c\fP file as \fBbar.c\fP in the \fBsave\fP dir
(assuming that \fBbar.c\fP isn't a directory):
.RS 4
.P
.nf
rsync -ai src/foo.c save/bar.c
.fi
.RE
.P
The single-item copy rule might accidentally bite you if you unknowingly copy a
single item and specify a destination dir that doesn't exist (without using a
trailing slash). For example, if \fBsrc/*.c\fP matches one file and \fBsave/dir\fP
doesn't exist, this will confuse you by naming the destination file \fBsave/dir\fP:
.RS 4
.P
.nf
rsync -ai src/*.c save/dir
.fi
.RE
.P
To prevent such an accident, either make sure the destination dir exists or
specify the destination path with a trailing slash:
.RS 4
.P
.nf
rsync -ai src/*.c save/dir/
.fi
.RE
.P
.SH "SORTED TRANSFER ORDER"
.P
Rsync always sorts the specified filenames into its internal transfer list.
This handles the merging together of the contents of identically named
directories, makes it easy to remove duplicate filenames. It can, however,
confuse someone when the files are transferred in a different order than what
was given on the command-line.
.P
If you need a particular file to be transferred prior to another, either
separate the files into different rsync calls, or consider using
\fB\-\-delay-updates\fP (which doesn't affect the sorted transfer order, but
does make the final file-updating phase happen much more rapidly).
.P
.SH "MULTI-HOST SECURITY"
.P
Rsync takes steps to ensure that the file requests that are shared in a
transfer are protected against various security issues. Most of the potential
problems arise on the receiving side where rsync takes steps to ensure that the
list of files being transferred remains within the bounds of what was
requested.
.P
Toward this end, rsync 3.1.2 and later have aborted when a file list contains
an absolute or relative path that tries to escape out of the top of the
transfer. Also, beginning with version 3.2.5, rsync does two more safety
checks of the file list to (1) ensure that no extra source arguments were added
into the transfer other than those that the client requested and (2) ensure
that the file list obeys the exclude rules that were sent to the sender.
.P
For those that don't yet have a 3.2.5 client rsync (or those that want to be
extra careful), it is safest to do a copy into a dedicated destination
directory for the remote files when you don't trust the remote host. For
example, instead of doing an rsync copy into your home directory:
.RS 4
.P
.nf
rsync -aiv host1:dir1 ~
.fi
.RE
.P
Dedicate a "host1-files" dir to the remote content:
.RS 4
.P
.nf
rsync -aiv host1:dir1 ~/host1-files
.fi
.RE
.P
See the \fB\-\-trust-sender\fP option for additional details.
.P
CAUTION: it is not particularly safe to use rsync to copy files from a
case-preserving filesystem to a case-ignoring filesystem. If you must perform
such a copy, you should either disable symlinks via \fB\-\-no-links\fP or enable the
munging of symlinks via \fB\-\-munge-links\fP (and make sure you use the
right local or remote option). This will prevent rsync from doing potentially
dangerous things if a symlink name overlaps with a file or directory. It does
not, however, ensure that you get a full copy of all the files (since that may
not be possible when the names overlap). A potentially better solution is to
list all the source files and create a safe list of filenames that you pass to
the \fB\-\-files-from\fP option. Any files that conflict in name would need
to be copied to different destination directories using more than one copy.
.P
While a copy of a case-ignoring filesystem to a case-ignoring filesystem can
work out fairly well, if no \fB\-\-delete-during\fP or \fB\-\-delete-before\fP option is
active, rsync can potentially update an existing file on the receiving side
without noticing that the upper-/lower-case of the filename should be changed
to match the sender.
.P
.SH "ADVANCED USAGE"
.P
The syntax for requesting multiple files from a remote host is done by
specifying additional remote-host args in the same style as the first, or with
the hostname omitted. For instance, all these work:
.RS 4
.P
.nf
rsync -aiv host:file1 :file2 host:file{3,4} /dest/
rsync -aiv host::modname/file{1,2} host::modname/extra /dest/
rsync -aiv host::modname/first ::extra-file{1,2} /dest/
.fi
.RE
.P
Note that a daemon connection only supports accessing one module per copy
command, so if the start of a follow-up path doesn't begin with the
modname of the first path, it is assumed to be a path in the module (such as
the extra-file1 & extra-file2 that are grabbed above).
.P
Really old versions of rsync (2.6.9 and before) only allowed specifying one
remote-source arg, so some people have instead relied on the remote-shell
performing space splitting to break up an arg into multiple paths. Such
unintuitive behavior is no longer supported by default (though you can request
it, as described below).
.P
Starting in 3.2.4, filenames are passed to a remote shell in such a way as to
preserve the characters you give it. Thus, if you ask for a file with spaces
in the name, that's what the remote rsync looks for:
.RS 4
.P
.nf
rsync -aiv host:'a simple file.pdf' /dest/
.fi
.RE
.P
If you use scripts that have been written to manually apply extra quoting to
the remote rsync args (or to require remote arg splitting), you can ask rsync
to let your script handle the extra escaping. This is done by either adding
the \fB\-\-old-args\fP option to the rsync runs in the script (which requires
a new rsync) or exporting RSYNC_OLD_ARGS=1 and RSYNC_PROTECT_ARGS=0
(which works with old or new rsync versions).
.P
.SH "CONNECTING TO AN RSYNC DAEMON"
.P
It is also possible to use rsync without a remote shell as the transport. In
this case you will directly connect to a remote rsync daemon, typically using
TCP port 873. (This obviously requires the daemon to be running on the remote
system, so refer to the STARTING AN RSYNC DAEMON TO ACCEPT CONNECTIONS
section below for information on that.)
.P
Using rsync in this way is the same as using it with a remote shell except
that:
.P
.IP o
Use either double-colon syntax or rsync:// URL syntax instead of the
single-colon (remote shell) syntax.
.IP o
The first element of the "path" is actually a module name.
.IP o
Additional remote source args can use an abbreviated syntax that omits the
hostname and/or the module name, as discussed in ADVANCED USAGE.
.IP o
The remote daemon may print a "message of the day" when you connect.
.IP o
If you specify only the host (with no module or path) then a list of
accessible modules on the daemon is output.
.IP o
If you specify a remote source path but no destination, a listing of the
matching files on the remote daemon is output.
.IP o
The \fB\-\-rsh\fP (\fB\-e\fP) option must be omitted to avoid changing the
connection style from using a socket connection to USING RSYNC-DAEMON
FEATURES VIA A REMOTE-SHELL CONNECTION.
.P
An example that copies all the files in a remote module named "src":
.RS 4
.P
.nf
rsync -av host::src /dest
.fi
.RE
.P
Some modules on the remote daemon may require authentication. If so, you will
receive a password prompt when you connect. You can avoid the password prompt
by setting the environment variable \fBRSYNC_PASSWORD\fP to the password you
want to use or using the \fB\-\-password-file\fP option. This may be useful
when scripting rsync.
.P
WARNING: On some systems environment variables are visible to all users. On
those systems using \fB\-\-password-file\fP is recommended.
.P
You may establish the connection via a web proxy by setting the environment
variable \fBRSYNC_PROXY\fP to a hostname:port pair pointing to your web proxy.
Note that your web proxy's configuration must support proxy connections to port
873.
.P
You may also establish a daemon connection using a program as a proxy by
setting the environment variable \fBRSYNC_CONNECT_PROG\fP to the commands you
wish to run in place of making a direct socket connection. The string may
contain the escape "%H" to represent the hostname specified in the rsync
command (so use "%%" if you need a single "%" in your string). For example:
.RS 4
.P
.nf
export RSYNC_CONNECT_PROG='ssh proxyhost nc %H 873'
rsync -av targethost1::module/src/ /dest/
rsync -av rsync://targethost2/module/src/ /dest/
.fi
.RE
.P
The command specified above uses ssh to run nc (netcat) on a proxyhost, which
forwards all data to port 873 (the rsync daemon) on the targethost (%H).
.P
Note also that if the \fBRSYNC_SHELL\fP environment variable is set, that
program will be used to run the \fBRSYNC_CONNECT_PROG\fP command instead of using
the default shell of the \fBsystem()\fP call.
.P
.SH "USING RSYNC-DAEMON FEATURES VIA A REMOTE-SHELL CONNECTION"
.P
It is sometimes useful to use various features of an rsync daemon (such as
named modules) without actually allowing any new socket connections into a
system (other than what is already required to allow remote-shell access).
Rsync supports connecting to a host using a remote shell and then spawning a
single-use "daemon" server that expects to read its config file in the home dir
of the remote user. This can be useful if you want to encrypt a daemon-style
transfer's data, but since the daemon is started up fresh by the remote user,
you may not be able to use features such as chroot or change the uid used by
the daemon. (For another way to encrypt a daemon transfer, consider using ssh
to tunnel a local port to a remote machine and configure a normal rsync daemon
on that remote host to only allow connections from "localhost".)
.P
From the user's perspective, a daemon transfer via a remote-shell connection
uses nearly the same command-line syntax as a normal rsync-daemon transfer,
with the only exception being that you must explicitly set the remote shell
program on the command-line with the \fB\-\-rsh=COMMAND\fP option. (Setting the
RSYNC_RSH in the environment will not turn on this functionality.) For example:
.RS 4
.P
.nf
rsync -av --rsh=ssh host::module /dest
.fi
.RE
.P
If you need to specify a different remote-shell user, keep in mind that the
user@ prefix in front of the host is specifying the rsync-user value (for a
module that requires user-based authentication). This means that you must give
the '\-l user' option to ssh when specifying the remote-shell, as in this
example that uses the short version of the \fB\-\-rsh\fP option:
.RS 4
.P
.nf
rsync -av -e "ssh -l ssh-user" rsync-user@host::module /dest
.fi
.RE
.P
The "ssh-user" will be used at the ssh level; the "rsync-user" will be used to
log-in to the "module".
.P
In this setup, the daemon is started by the ssh command that is accessing the
system (which can be forced via the \fB~/.ssh/authorized_keys\fP file, if desired).
However, when accessing a daemon directly, it needs to be started beforehand.
.P
.SH "STARTING AN RSYNC DAEMON TO ACCEPT CONNECTIONS"
.P
In order to connect to an rsync daemon, the remote system needs to have a
daemon already running (or it needs to have configured something like inetd to
spawn an rsync daemon for incoming connections on a particular port). For full
information on how to start a daemon that will handling incoming socket
connections, see the \fBrsyncd.conf\fP(5) manpage\ \-\- that is
the config file for the daemon, and it contains the full details for how to run
the daemon (including stand-alone and inetd configurations).
.P
If you're using one of the remote-shell transports for the transfer, there is
no need to manually start an rsync daemon.
.P
.SH "EXAMPLES"
.P
Here are some examples of how rsync can be used.
.P
To backup a home directory, which consists of large MS Word files and mail
folders, a per-user cron job can be used that runs this each day:
.RS 4
.P
.nf
rsync -aiz . bkhost:backup/joe/
.fi
.RE
.P
To move some files from a remote host to the local host, you could run:
.RS 4
.P
.nf
rsync -aiv --remove-source-files rhost:/tmp/{file1,file2}.c ~/src/
.fi
.RE
.P
.SH "OPTION SUMMARY"
.P
Here is a short summary of the options available in rsync. Each option also
has its own detailed description later in this manpage.
.P
.nf
--verbose, -v increase verbosity
--info=FLAGS fine-grained informational verbosity
--debug=FLAGS fine-grained debug verbosity
--stderr=e|a|c change stderr output mode (default: errors)
--quiet, -q suppress non-error messages
--no-motd suppress daemon-mode MOTD
--checksum, -c skip based on checksum, not mod-time & size
--archive, -a archive mode is -rlptgoD (no -A,-X,-U,-N,-H)
--no-OPTION turn off an implied OPTION (e.g. --no-D)
--recursive, -r recurse into directories
--relative, -R use relative path names
--no-implied-dirs don't send implied dirs with --relative
--backup, -b make backups (see --suffix & --backup-dir)
--backup-dir=DIR make backups into hierarchy based in DIR
--suffix=SUFFIX backup suffix (default ~ w/o --backup-dir)
--update, -u skip files that are newer on the receiver
--inplace update destination files in-place
--append append data onto shorter files
--append-verify --append w/old data in file checksum
--dirs, -d transfer directories without recursing
--old-dirs, --old-d works like --dirs when talking to old rsync
--mkpath create destination's missing path components
--links, -l copy symlinks as symlinks
--copy-links, -L transform symlink into referent file/dir
--copy-unsafe-links only "unsafe" symlinks are transformed
--safe-links ignore symlinks that point outside the tree
--munge-links munge symlinks to make them safe & unusable
--copy-dirlinks, -k transform symlink to dir into referent dir
--keep-dirlinks, -K treat symlinked dir on receiver as dir
--hard-links, -H preserve hard links
--perms, -p preserve permissions
--executability, -E preserve executability
--chmod=CHMOD affect file and/or directory permissions
--acls, -A preserve ACLs (implies --perms)
--xattrs, -X preserve extended attributes
--owner, -o preserve owner (super-user only)
--group, -g preserve group
--devices preserve device files (super-user only)
--copy-devices copy device contents as a regular file
--write-devices write to devices as files (implies --inplace)
--specials preserve special files
-D same as --devices --specials
--times, -t preserve modification times
--atimes, -U preserve access (use) times
--open-noatime avoid changing the atime on opened files
--crtimes, -N preserve create times (newness)
--omit-dir-times, -O omit directories from --times
--omit-link-times, -J omit symlinks from --times
--super receiver attempts super-user activities
--fake-super store/recover privileged attrs using xattrs
--sparse, -S turn sequences of nulls into sparse blocks
--preallocate allocate dest files before writing them
--dry-run, -n perform a trial run with no changes made
--whole-file, -W copy files whole (w/o delta-xfer algorithm)
--checksum-choice=STR choose the checksum algorithm (aka --cc)
--one-file-system, -x don't cross filesystem boundaries
--block-size=SIZE, -B force a fixed checksum block-size
--rsh=COMMAND, -e specify the remote shell to use
--rsync-path=PROGRAM specify the rsync to run on remote machine
--existing skip creating new files on receiver
--ignore-existing skip updating files that exist on receiver
--remove-source-files sender removes synchronized files (non-dir)
--del an alias for --delete-during
--delete delete extraneous files from dest dirs
--delete-before receiver deletes before xfer, not during
--delete-during receiver deletes during the transfer
--delete-delay find deletions during, delete after
--delete-after receiver deletes after transfer, not during
--delete-excluded also delete excluded files from dest dirs
--ignore-missing-args ignore missing source args without error
--delete-missing-args delete missing source args from destination
--ignore-errors delete even if there are I/O errors
--force force deletion of dirs even if not empty
--max-delete=NUM don't delete more than NUM files
--max-size=SIZE don't transfer any file larger than SIZE
--min-size=SIZE don't transfer any file smaller than SIZE
--max-alloc=SIZE change a limit relating to memory alloc
--partial keep partially transferred files
--partial-dir=DIR put a partially transferred file into DIR
--delay-updates put all updated files into place at end
--prune-empty-dirs, -m prune empty directory chains from file-list
--numeric-ids don't map uid/gid values by user/group name
--usermap=STRING custom username mapping
--groupmap=STRING custom groupname mapping
--chown=USER:GROUP simple username/groupname mapping
--timeout=SECONDS set I/O timeout in seconds
--contimeout=SECONDS set daemon connection timeout in seconds
--ignore-times, -I don't skip files that match size and time
--size-only skip files that match in size
--modify-window=NUM, -@ set the accuracy for mod-time comparisons
--temp-dir=DIR, -T create temporary files in directory DIR
--fuzzy, -y find similar file for basis if no dest file
--compare-dest=DIR also compare destination files relative to DIR
--copy-dest=DIR ... and include copies of unchanged files
--link-dest=DIR hardlink to files in DIR when unchanged
--compress, -z compress file data during the transfer
--compress-choice=STR choose the compression algorithm (aka --zc)
--compress-level=NUM explicitly set compression level (aka --zl)
--skip-compress=LIST skip compressing files with suffix in LIST
--cvs-exclude, -C auto-ignore files in the same way CVS does
--filter=RULE, -f add a file-filtering RULE
-F same as --filter='dir-merge /.rsync-filter'
repeated: --filter='- .rsync-filter'
--exclude=PATTERN exclude files matching PATTERN
--exclude-from=FILE read exclude patterns from FILE
--include=PATTERN don't exclude files matching PATTERN
--include-from=FILE read include patterns from FILE
--files-from=FILE read list of source-file names from FILE
--from0, -0 all *-from/filter files are delimited by 0s
--old-args disable the modern arg-protection idiom
--secluded-args, -s use the protocol to safely send the args
--trust-sender trust the remote sender's file list
--copy-as=USER[:GROUP] specify user & optional group for the copy
--address=ADDRESS bind address for outgoing socket to daemon
--port=PORT specify double-colon alternate port number
--sockopts=OPTIONS specify custom TCP options
--blocking-io use blocking I/O for the remote shell
--outbuf=N|L|B set out buffering to None, Line, or Block
--stats give some file-transfer stats
--8-bit-output, -8 leave high-bit chars unescaped in output
--human-readable, -h output numbers in a human-readable format
--progress show progress during transfer
-P same as --partial --progress
--itemize-changes, -i output a change-summary for all updates
--remote-option=OPT, -M send OPTION to the remote side only
--out-format=FORMAT output updates using the specified FORMAT
--log-file=FILE log what we're doing to the specified FILE
--log-file-format=FMT log updates using the specified FMT
--password-file=FILE read daemon-access password from FILE
--early-input=FILE use FILE for daemon's early exec input
--list-only list the files instead of copying them
--bwlimit=RATE limit socket I/O bandwidth
--stop-after=MINS Stop rsync after MINS minutes have elapsed
--stop-at=y-m-dTh:m Stop rsync at the specified point in time
--fsync fsync every written file
--write-batch=FILE write a batched update to FILE
--only-write-batch=FILE like --write-batch but w/o updating dest
--read-batch=FILE read a batched update from FILE
--protocol=NUM force an older protocol version to be used
--iconv=CONVERT_SPEC request charset conversion of filenames
--checksum-seed=NUM set block/file checksum seed (advanced)
--ipv4, -4 prefer IPv4
--ipv6, -6 prefer IPv6
--version, -V print the version + other info and exit
--help, -h (*) show this help (* -h is help only on its own)
.fi
.P
Rsync can also be run as a daemon, in which case the following options are
accepted:
.P
.nf
--daemon run as an rsync daemon
--address=ADDRESS bind to the specified address
--bwlimit=RATE limit socket I/O bandwidth
--config=FILE specify alternate rsyncd.conf file
--dparam=OVERRIDE, -M override global daemon config parameter
--no-detach do not detach from the parent
--port=PORT listen on alternate port number
--log-file=FILE override the "log file" setting
--log-file-format=FMT override the "log format" setting
--sockopts=OPTIONS specify custom TCP options
--verbose, -v increase verbosity
--ipv4, -4 prefer IPv4
--ipv6, -6 prefer IPv6
--help, -h show this help (when used with --daemon)
.fi
.P
.SH "OPTIONS"
.P
Rsync accepts both long (double-dash + word) and short (single-dash + letter)
options. The full list of the available options are described below. If an
option can be specified in more than one way, the choices are comma-separated.
Some options only have a long variant, not a short.
.P
If the option takes a parameter, the parameter is only listed after the long
variant, even though it must also be specified for the short. When specifying
a parameter, you can either use the form \fB\-\-option=param\fP, \fB\-\-option\ param\fP,
\fB\-o=param\fP, \fB\-o\ param\fP, or \fB\-oparam\fP (the latter choices assume that your
option has a short variant).
.P
The parameter may need to be quoted in some manner for it to survive the
shell's command-line parsing. Also keep in mind that a leading tilde (\fB~\fP) in
a pathname is substituted by your shell, so make sure that you separate the
option name from the pathname using a space if you want the local shell to
expand it.
.P
.IP "\fB\-\-help\fP"
Print a short help page describing the options available in rsync and exit.
You can also use \fB\-h\fP for \fB\-\-help\fP when it is used without any other
options (since it normally means \fB\-\-human-readable\fP).
.IP "\fB\-\-version\fP, \fB\-V\fP"
Print the rsync version plus other info and exit. When repeated, the
information is output is a JSON format that is still fairly readable
(client side only).
.IP
The output includes a list of compiled-in capabilities, a list of
optimizations, the default list of checksum algorithms, the default list of
compression algorithms, the default list of daemon auth digests, a link to
the rsync web site, and a few other items.
.IP "\fB\-\-verbose\fP, \fB\-v\fP"
This option increases the amount of information you are given during the
transfer. By default, rsync works silently. A single \fB\-v\fP will give you
information about what files are being transferred and a brief summary at
the end. Two \fB\-v\fP options will give you information on what files are
being skipped and slightly more information at the end. More than two \fB\-v\fP
options should only be used if you are debugging rsync.
.IP
The end-of-run summary tells you the number of bytes sent to the remote
rsync (which is the receiving side on a local copy), the number of bytes
received from the remote host, and the average bytes per second of the
transferred data computed over the entire length of the rsync run. The
second line shows the total size (in bytes), which is the sum of all the
file sizes that rsync considered transferring. It also shows a "speedup"
value, which is a ratio of the total file size divided by the sum of the
sent and received bytes (which is really just a feel-good bigger-is-better
number). Note that these byte values can be made more (or less)
human-readable by using the \fB\-\-human-readable\fP (or
\fB\-\-no-human-readable\fP) options.
.IP
In a modern rsync, the \fB\-v\fP option is equivalent to the setting of groups
of \fB\-\-info\fP and \fB\-\-debug\fP options. You can choose to use
these newer options in addition to, or in place of using \fB\-\-verbose\fP, as
any fine-grained settings override the implied settings of \fB\-v\fP. Both
\fB\-\-info\fP and \fB\-\-debug\fP have a way to ask for help that
tells you exactly what flags are set for each increase in verbosity.
.IP
However, do keep in mind that a daemon's "\fBmax\ verbosity\fP" setting will limit
how high of a level the various individual flags can be set on the daemon
side. For instance, if the max is 2, then any info and/or debug flag that
is set to a higher value than what would be set by \fB\-vv\fP will be downgraded
to the \fB\-vv\fP level in the daemon's logging.
.IP "\fB\-\-info=FLAGS\fP"
This option lets you have fine-grained control over the information output
you want to see. An individual flag name may be followed by a level
number, with 0 meaning to silence that output, 1 being the default output
level, and higher numbers increasing the output of that flag (for those
that support higher levels). Use \fB\-\-info=help\fP to see all the available
flag names, what they output, and what flag names are added for each
increase in the verbose level. Some examples:
.RS 4
.IP
.nf
rsync -a --info=progress2 src/ dest/
rsync -avv --info=stats2,misc1,flist0 src/ dest/
.fi
.RE
.IP
Note that \fB\-\-info=name\fP's output is affected by the \fB\-\-out-format\fP
and \fB\-\-itemize-changes\fP (\fB\-i\fP) options. See those options for more
information on what is output and when.
.IP
This option was added to 3.1.0, so an older rsync on the server side might
reject your attempts at fine-grained control (if one or more flags needed
to be send to the server and the server was too old to understand them).
See also the "\fBmax\ verbosity\fP" caveat above when dealing with a daemon.
.IP "\fB\-\-debug=FLAGS\fP"
This option lets you have fine-grained control over the debug output you
want to see. An individual flag name may be followed by a level number,
with 0 meaning to silence that output, 1 being the default output level,
and higher numbers increasing the output of that flag (for those that
support higher levels). Use \fB\-\-debug=help\fP to see all the available flag
names, what they output, and what flag names are added for each increase in
the verbose level. Some examples:
.RS 4
.IP
.nf
rsync -avvv --debug=none src/ dest/
rsync -avA --del --debug=del2,acl src/ dest/
.fi
.RE
.IP
Note that some debug messages will only be output when the \fB\-\-stderr=all\fP
option is specified, especially those pertaining to I/O and buffer debugging.
.IP
Beginning in 3.2.0, this option is no longer auto-forwarded to the server
side in order to allow you to specify different debug values for each side
of the transfer, as well as to specify a new debug option that is only
present in one of the rsync versions. If you want to duplicate the same
option on both sides, using brace expansion is an easy way to save you some
typing. This works in zsh and bash:
.RS 4
.IP
.nf
rsync -aiv {-M,}--debug=del2 src/ dest/
.fi
.RE
.IP "\fB\-\-stderr=errors|all|client\fP"
This option controls which processes output to stderr and if info messages
are also changed to stderr. The mode strings can be abbreviated, so feel
free to use a single letter value. The 3 possible choices are:
.IP
.RS
.IP o
\fBerrors\fP \- (the default) causes all the rsync processes to send an
error directly to stderr, even if the process is on the remote side of
the transfer. Info messages are sent to the client side via the protocol
stream. If stderr is not available (i.e. when directly connecting with a
daemon via a socket) errors fall back to being sent via the protocol
stream.
.IP o
\fBall\fP \- causes all rsync messages (info and error) to get written
directly to stderr from all (possible) processes. This causes stderr to
become line-buffered (instead of raw) and eliminates the ability to
divide up the info and error messages by file handle. For those doing
debugging or using several levels of verbosity, this option can help to
avoid clogging up the transfer stream (which should prevent any chance of
a deadlock bug hanging things up). It also allows \fB\-\-debug\fP to
enable some extra I/O related messages.
.IP o
\fBclient\fP \- causes all rsync messages to be sent to the client side
via the protocol stream. One client process outputs all messages, with
errors on stderr and info messages on stdout. This \fBwas\fP the default
in older rsync versions, but can cause error delays when a lot of
transfer data is ahead of the messages. If you're pushing files to an
older rsync, you may want to use \fB\-\-stderr=all\fP since that idiom has
been around for several releases.
.RE
.IP
This option was added in rsync 3.2.3. This version also began the
forwarding of a non-default setting to the remote side, though rsync uses
the backward-compatible options \fB\-\-msgs2stderr\fP and \fB\-\-no-msgs2stderr\fP to
represent the \fBall\fP and \fBclient\fP settings, respectively. A newer rsync
will continue to accept these older option names to maintain compatibility.
.IP "\fB\-\-quiet\fP, \fB\-q\fP"
This option decreases the amount of information you are given during the
transfer, notably suppressing information messages from the remote server.
This option is useful when invoking rsync from cron.
.IP "\fB\-\-no-motd\fP"
This option affects the information that is output by the client at the
start of a daemon transfer. This suppresses the message-of-the-day (MOTD)
text, but it also affects the list of modules that the daemon sends in
response to the "rsync host::" request (due to a limitation in the rsync
protocol), so omit this option if you want to request the list of modules
from the daemon.
.IP "\fB\-\-ignore-times\fP, \fB\-I\fP"
Normally rsync will skip any files that are already the same size and have
the same modification timestamp. This option turns off this "quick check"
behavior, causing all files to be updated.
.IP
This option can be confusing compared to \fB\-\-ignore-existing\fP and
\fB\-\-ignore-non-existing\fP in that that they cause rsync to transfer
fewer files, while this option causes rsync to transfer more files.
.IP "\fB\-\-size-only\fP"
This modifies rsync's "quick check" algorithm for finding files that need
to be transferred, changing it from the default of transferring files with
either a changed size or a changed last-modified time to just looking for
files that have changed in size. This is useful when starting to use rsync
after using another mirroring system which may not preserve timestamps
exactly.
.IP "\fB\-\-modify-window=NUM\fP, \fB\-@\fP"
When comparing two timestamps, rsync treats the timestamps as being equal
if they differ by no more than the modify-window value. The default is 0,
which matches just integer seconds. If you specify a negative value (and
the receiver is at least version 3.1.3) then nanoseconds will also be taken
into account. Specifying 1 is useful for copies to/from MS Windows FAT
filesystems, because FAT represents times with a 2-second resolution
(allowing times to differ from the original by up to 1 second).
.IP
If you want all your transfers to default to comparing nanoseconds, you can
create a \fB~/.popt\fP file and put these lines in it:
.RS 4
.IP
.nf
rsync alias -a -a@-1
rsync alias -t -t@-1
.fi
.RE
.IP
With that as the default, you'd need to specify \fB\-\-modify-window=0\fP (aka
\fB\-@0\fP) to override it and ignore nanoseconds, e.g. if you're copying
between ext3 and ext4, or if the receiving rsync is older than 3.1.3.
.IP "\fB\-\-checksum\fP, \fB\-c\fP"
This changes the way rsync checks if the files have been changed and are in
need of a transfer. Without this option, rsync uses a "quick check" that
(by default) checks if each file's size and time of last modification match
between the sender and receiver. This option changes this to compare a
128-bit checksum for each file that has a matching size. Generating the
checksums means that both sides will expend a lot of disk I/O reading all
the data in the files in the transfer, so this can slow things down
significantly (and this is prior to any reading that will be done to
transfer changed files)
.IP
The sending side generates its checksums while it is doing the file-system
scan that builds the list of the available files. The receiver generates
its checksums when it is scanning for changed files, and will checksum any
file that has the same size as the corresponding sender's file: files with
either a changed size or a changed checksum are selected for transfer.
.IP
Note that rsync always verifies that each \fItransferred\fP file was correctly
reconstructed on the receiving side by checking a whole-file checksum that
is generated as the file is transferred, but that automatic
after-the-transfer verification has nothing to do with this option's
before-the-transfer "Does this file need to be updated?" check.
.IP
The checksum used is auto-negotiated between the client and the server, but
can be overridden using either the \fB\-\-checksum-choice\fP (\fB\-\-cc\fP)
option or an environment variable that is discussed in that option's
section.
.IP "\fB\-\-archive\fP, \fB\-a\fP"
This is equivalent to \fB\-rlptgoD\fP. It is a quick way of saying you want
recursion and want to preserve almost everything. Be aware that it does
\fBnot\fP include preserving ACLs (\fB\-A\fP), xattrs (\fB\-X\fP), atimes (\fB\-U\fP),
crtimes (\fB\-N\fP), nor the finding and preserving of hardlinks (\fB\-H\fP).
.IP
The only exception to the above equivalence is when \fB\-\-files-from\fP
is specified, in which case \fB\-r\fP is not implied.
.IP "\fB\-\-no-OPTION\fP"
You may turn off one or more implied options by prefixing the option name
with "no-". Not all positive options have a negated opposite, but a lot
do, including those that can be used to disable an implied option (e.g.
\fB\-\-no-D\fP, \fB\-\-no-perms\fP) or have different defaults in various circumstances
(e.g. \fB\-\-no-whole-file\fP, \fB\-\-no-blocking-io\fP, \fB\-\-no-dirs\fP). Every
valid negated option accepts both the short and the long option name after
the "no-" prefix (e.g. \fB\-\-no-R\fP is the same as \fB\-\-no-relative\fP).
.IP
As an example, if you want to use \fB\-\-archive\fP (\fB\-a\fP) but don't want
\fB\-\-owner\fP (\fB\-o\fP), instead of converting \fB\-a\fP into \fB\-rlptgD\fP, you
can specify \fB\-a\ \-\-no-o\fP (aka \fB\-\-archive\ \-\-no-owner\fP).
.IP
The order of the options is important: if you specify \fB\-\-no-r\ \-a\fP, the \fB\-r\fP
option would end up being turned on, the opposite of \fB\-a\ \-\-no-r\fP. Note
also that the side-effects of the \fB\-\-files-from\fP option are NOT
positional, as it affects the default state of several options and slightly
changes the meaning of \fB\-a\fP (see the \fB\-\-files-from\fP option
for more details).
.IP "\fB\-\-recursive\fP, \fB\-r\fP"
This tells rsync to copy directories recursively. See also
\fB\-\-dirs\fP (\fB\-d\fP) for an option that allows the scanning of a single
directory.
.IP
See the \fB\-\-inc-recursive\fP option for a discussion of the
incremental recursion for creating the list of files to transfer.
.IP "\fB\-\-inc-recursive\fP, \fB\-\-i-r\fP"
This option explicitly enables on incremental recursion when scanning for
files, which is enabled by default when using the \fB\-\-recursive\fP
option and both sides of the transfer are running rsync 3.0.0 or newer.
.IP
Incremental recursion uses much less memory than non-incremental, while
also beginning the transfer more quickly (since it doesn't need to scan the
entire transfer hierarchy before it starts transferring files). If no
recursion is enabled in the source files, this option has no effect.
.IP
Some options require rsync to know the full file list, so these options
disable the incremental recursion mode. These include:
.IP
.RS
.IP o
\fB\-\-delete-before\fP (the old default of \fB\-\-delete\fP)
.IP o
\fB\-\-delete-after\fP
.IP o
\fB\-\-prune-empty-dirs\fP
.IP o
\fB\-\-delay-updates\fP
.RE
.IP
In order to make \fB\-\-delete\fP compatible with incremental recursion,
rsync 3.0.0 made \fB\-\-delete-during\fP the default delete mode (which
was first added in 2.6.4).
.IP
One side-effect of incremental recursion is that any missing
sub-directories inside a recursively-scanned directory are (by default)
created prior to recursing into the sub-dirs. This earlier creation point
(compared to a non-incremental recursion) allows rsync to then set the
modify time of the finished directory right away (without having to delay
that until a bunch of recursive copying has finished). However, these
early directories don't yet have their completed mode, mtime, or ownership
set\ \-\- they have more restrictive rights until the subdirectory's copying
actually begins. This early-creation idiom can be avoided by using the
\fB\-\-omit-dir-times\fP option.
.IP
Incremental recursion can be disabled using the
\fB\-\-no-inc-recursive\fP (\fB\-\-no-i-r\fP) option.
.IP "\fB\-\-no-inc-recursive\fP, \fB\-\-no-i-r\fP"
Disables the new incremental recursion algorithm of the
\fB\-\-recursive\fP option. This makes rsync scan the full file list
before it begins to transfer files. See \fB\-\-inc-recursive\fP for more
info.
.IP "\fB\-\-relative\fP, \fB\-R\fP"
Use relative paths. This means that the full path names specified on the
command line are sent to the server rather than just the last parts of the
filenames. This is particularly useful when you want to send several
different directories at the same time. For example, if you used this
command: