Are you trying to preserve permissions in rsync?
This guide is for you.
File copying is about more than just content – the metadata for user ownership, permissions, and timestamps is often critical to retrieval and function.
Sometimes, after migration, it becomes a tedious task to compare and set the permissions of files/folders as in the source server.
To make this easy we can preserve the permissions while migrating using rsync.
How to preserve Permissions in rsync ?
rsync is a powerful file and folder synchronization tool in Linux.
The advantage of rsync is that instead of copying data blindly, it compares the source and destination directories so that only the difference between the two is sent through the network (or between volumes).
Before going to the commands for preserving permissions in rsync we will see some of the features of rsync.
Some features key features of rsync are:
1. We can update whole directory trees and filesystems.
2. It allows to optionally preserves symbolic links, hard links, file ownership, permissions, devices, and times.
3. In addition to this, it also does not requires any special privileges for installing.
4. Internal pipelining reduces latency for multiple files.
5. Can use rsh, ssh or direct sockets as the transport
6. It supports anonymous rsync which is ideal for mirroring.
Process to preserve permissions in rsync
In order to preserve permissions, we will use -p flag (–perms).
We can also use -a flag (–archive), which is an aggregation of -p and several other useful ones.
Archive mode consists of the following flags:
-r, --recursive recurse into directories
-l, --links Copy symlinks as symlinks
-p, --perms Preserve permissions
-t, --times Preserve times
-g, --group Preserve group
-o, --owner Preserve owner (super-user only)
-D, --devices --specials Preserve devices (super-user only) +files
rsync -a option preserves the permissions, ownership, timestamp of files and folders that are to be transferred using rsync.
To transfer a file or folder from source to destination using rsync, we use the format:
rsync source destination
To preserve the above-mentioned permissions, ownership, and timestamp we can use the following command:
rsync -avz source destination
This will synchronize the two folders or files and will also maintain the same timestamp as that of the source.
To test whether the rsync has been done right we can check the permission of files in a folder in the source destination using the following command:
Rsync copies the numerical user id of the file, regardless if it exists on the target system.