Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Slashes and the rsync command

I am trying to do something along the same lines as what is asked in this question: RSync: How do I synchronize in both directions?

However, what I can't figure out is whether or not I should add slashes to the end of the file path. Basically I'm trying to create an alias command that syncs the contents of two directories that go by the same name but are on two different servers. What I don't want is for one directory to be copied into the other (which I am aware is a possibility depending on how the slashes at the end are done).

What I have currently is:

alias syncDirectories1 = 'rsync -tvur name@host:/Users/me/directory/ /Users/me/directory/' alias syncDirectories2 = 'rsync -tvur /Users/me/directory/ name@host:/Users/me/directory/' 

For what I am trying to accomplish, should there be slashes at the end of both file paths?

Thank you in advance for the help.

like image 392
cadams Avatar asked Jul 07 '15 19:07

cadams


People also ask

What is the rsync command?

Rsync, or Remote Sync, is a free command-line tool that lets you transfer files and directories to local and remote destinations. Rsync is used for mirroring, performing backups, or migrating data to other servers.

Does rsync move or copy?

Rsync (Remote Sync) is the most commonly used command for copying and synchronizing files and directories remotely as well as locally in Linux/Unix systems.

Does rsync go both ways?

Usage. rsync works in one direction, so we need to run it twice to sync directories in both directions.

How do I transfer files using rsync?

If you want to copy a file from one location to another within your system, you can do so by typing rsync followed by the source file name and the destination directory. Note: Instead of “/home/tin/file1. txt”, we can also type “file1” as we are currently working in the home directory.


Video Answer


2 Answers

It's described in the rsync(1) manpage:

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:

rsync -av /src/foo /dest rsync -av /src/foo/ /dest/foo 

As to the destination, I don't think it has any major consequences. There is a difference if the source is a file and destination doesn't exist — this will make a copy of SRC called DEST:

rsync SRC DEST 

, whereas, this will create directory DEST and copy the SRC file into it:

rsync SRC DEST/ 
like image 173
werkritter Avatar answered Oct 04 '22 06:10

werkritter


I tested it with rsync 3.1.3 on Arch Linux, the results are below:

1. rsync -avPzu test  login@remote:/home/login/test   "test" directory is copied inside of existing "test" on remote (structure is then test/test/...) 2. rsync -avPzu test  login@remote:/home/login/test/  same as above 3. rsync -avPzu test/ login@remote:/home/login/test   content of "test" directory is synchronized with the remote "test" directory 4. rsync -avPzu test/ login@remote:/home/login/test/  same as above 5. rsync -avPzu test  login@remote:/home/login/       same as above 6. rsync -avPzu test  login@remote:/home/login        same as above 

The methods 3-6 are the correct ones in this case, contrary to the accepted answer.

like image 33
mak Avatar answered Oct 04 '22 05:10

mak