rsync
Local
- Source directory:
dir1
- Destination directory:
dir2
- Testing:
rsync -n ...
Synchronize a directory in another directory
_$: ls -lar dir1
total 20
drwxr-xr-x 2 <user> <user> 4096 Jan 9 09:06 sub12
drwxr-xr-x 2 <user> <user> 4096 Jan 9 09:06 sub11
-rw-r--r-- 1 <user> <user> 2 Jan 9 09:06 a
drwxr-xr-x 4 <user> <user> 4096 Jan 9 09:06 ..
drwxr-xr-x 4 <user> <user> 4096 Jan 9 09:06 .
_$: rsync -av dir1/ dir2/
sending incremental file list
./
a
sub11/
sub12/
sent 163 bytes received 42 bytes 410.00 bytes/sec
total size is 2 speedup is 0.01
_$: ls -lar dir2/
total 20
drwxr-xr-x 2 <user> <user> 4096 Jan 9 09:06 sub12
drwxr-xr-x 2 <user> <user> 4096 Jan 9 09:06 sub11
-rw-r--r-- 1 <user> <user> 2 Jan 9 09:06 a
drwxr-xr-x 4 <user> <user> 4096 Jan 9 09:06 ..
drwxr-xr-x 4 <user> <user> 4096 Jan 9 09:06 .
Synchronize a directory in another non-empty directory
_$: ls -lar dir1/
total 20
drwxr-xr-x 2 <user> <user> 4096 Jan 9 09:06 sub12
drwxr-xr-x 2 <user> <user> 4096 Jan 9 09:06 sub11
-rw-r--r-- 1 <user> <user> 2 Jan 9 09:06 a
drwxr-xr-x 4 <user> <user> 4096 Jan 9 09:06 ..
drwxr-xr-x 4 <user> <user> 4096 Jan 9 09:06 .
_$: ls -lar dir2/
total 12
-rw-r--r-- 1 <user> <user> 2 Jan 9 09:14 b
drwxr-xr-x 4 <user> <user> 4096 Jan 9 09:06 ..
drwxr-xr-x 2 <user> <user> 4096 Jan 9 09:14 .
_$: rsync -av dir1/ dir2/
sending incremental file list
./
a
sub11/
sub12/
sent 163 bytes received 42 bytes 410.00 bytes/sec
total size is 2 speedup is 0.01
_$: ls -lar dir2/
total 24
drwxr-xr-x 2 <user> <user> 4096 Jan 9 09:06 sub12
drwxr-xr-x 2 <user> <user> 4096 Jan 9 09:06 sub11
-rw-r--r-- 1 <user> <user> 2 Jan 9 09:14 b
-rw-r--r-- 1 <user> <user> 2 Jan 9 09:06 a
drwxr-xr-x 4 <user> <user> 4096 Jan 9 09:06 ..
drwxr-xr-x 4 <user> <user> 4096 Jan 9 09:06 .
Synchronize a directory in another directory excluding .git
files
_$: ls -lar dir1/
total 24
drwxr-xr-x 2 <user> <user> 4096 Jan 9 09:06 sub12
drwxr-xr-x 2 <user> <user> 4096 Jan 9 09:06 sub11
-rw-r--r-- 1 <user> <user> 0 Jan 9 09:22 .git1
drwxr-xr-x 2 <user> <user> 4096 Jan 9 09:22 .git
-rw-r--r-- 1 <user> <user> 2 Jan 9 09:06 a
drwxr-xr-x 4 <user> <user> 4096 Jan 9 09:06 ..
drwxr-xr-x 5 <user> <user> 4096 Jan 9 09:22 .
_$: rsync -av --exclude=".git*" dir1/ dir2/
sending incremental file list
./
a
sub11/
sub12/
sent 163 bytes received 42 bytes 410.00 bytes/sec
total size is 2 speedup is 0.01
_$: ls -lar dir2/
total 20
drwxr-xr-x 2 <user> <user> 4096 Jan 9 09:06 sub12
drwxr-xr-x 2 <user> <user> 4096 Jan 9 09:06 sub11
-rw-r--r-- 1 <user> <user> 2 Jan 9 09:06 a
drwxr-xr-x 4 <user> <user> 4096 Jan 9 09:06 ..
drwxr-xr-x 4 <user> <user> 4096 Jan 9 09:22 .
Synchronize a directory in another directory excluding .git
and .pyc
files
_$: ls -lar dir1/
total 24
drwxr-xr-x 2 <user> <user> 4096 Jan 9 09:06 sub12
drwxr-xr-x 2 <user> <user> 4096 Jan 9 09:06 sub11
-rw-r--r-- 1 <user> <user> 0 Jan 9 09:29 script.pyc
-rw-r--r-- 1 <user> <user> 0 Jan 9 09:29 script.py
-rw-r--r-- 1 <user> <user> 0 Jan 9 09:22 .git1
drwxr-xr-x 2 <user> <user> 4096 Jan 9 09:22 .git
-rw-r--r-- 1 <user> <user> 2 Jan 9 09:06 a
drwxr-xr-x 4 <user> <user> 4096 Jan 9 09:06 ..
drwxr-xr-x 5 <user> <user> 4096 Jan 9 09:29 .
_$: rsync -av --exclude=".git*" --exclude="*.pyc" dir1/ dir2/
sending incremental file list
./
a
script.py
sub11/
sub12/
sent 224 bytes received 61 bytes 570.00 bytes/sec
total size is 2 speedup is 0.01
_$: ls -lar dir2/
total 20
drwxr-xr-x 2 <user> <user> 4096 Jan 9 09:06 sub12
drwxr-xr-x 2 <user> <user> 4096 Jan 9 09:06 sub11
-rw-r--r-- 1 <user> <user> 0 Jan 9 09:29 script.py
-rw-r--r-- 1 <user> <user> 2 Jan 9 09:06 a
drwxr-xr-x 4 <user> <user> 4096 Jan 9 09:06 ..
drwxr-xr-x 4 <user> <user> 4096 Jan 9 09:29 .
Remote
- Source host:
src
- Source user:
userSRC
- Source directory:
dirSRC
- Destination host:
dst
- Destination user:
userDST
- Destination directory:
dirDST
- Testing:
rsync -n ...
Synchronize a directory in a remote host
a) Pull from dst
of src
:
(userDST@dst)_$: rsync -av -e "ssh" userSRC@src:/dirSRC/ /dirDST
b) Push from src
to dst
:
(userSRC@src)_$: rsync -av -e "ssh" /dirSRC/ userDST@dst:/dirDST
Synchronize all files starting with main_
from a directory in a remote host
Push from src
to dst
:
(userSRC@src)_$: rsync -av -e "ssh" \
--include="main_*" --exclude="*" \
/dirSRC/ userDST@dst:/dirDST
Troubleshooting
1) The user userDST
is not the owner of /dir
If userDST
is not root, add userDST
to the sudoers file with:
backup ALL= NOPASSWD: /usr/bin/rsync
2) The user root
is the owner of /dir
Add userDST
to the sudoers file with:
backup ALL= NOPASSWD: /usr/bin/rsync
Add the flag --rsync-path="sudo rsync"
to the command line:
_$: rsync <options> --rsync-path="sudo rsync" <src> <dst>