11

I want to copy current directory to my backup directory:

I tried this command rsync -a . ~/backup/ but it just copies the current directory contents instead of creating new directory at the destination.

I know creating new directory at the destination end can be achieved by avoiding the trailing slash in source path. But it does not work in my case since I am using a period(".") instead of directory name.

I want rsync to create a new directory at the destination path with name same as the current directory. How can I achieve this?

2 Answers 2

7

I like your script but, if needed, you can do it by command line directly from the current directory:

rsync -a "$PWD" ~/backup/

or in a way similar to your script approach with

rsync -a "$(pwd -P)" ~/backup/

Notes:

  • It is needed to quote the current directory if in the path is present, for example, one or more spaces.

  • In case of symbolic links in the path it is possible to obtain the physical path avoiding all the symlinks specifying the option -P in the pwd command invocation ($(pwd -P)), or calling the executable with its full path ($(/bin/pwd)).
    Indeed there exists the built-in pwd that by default shows the symlinked path, and the executable /bin/pwd that by default shows the physical path.

  • Both commands refer to the variable $PWD that contains the the present working directory when they are asked for the version of the path with the eventual symlinks: so if you do not strictly need the physical path, you can avoid to call the subshell and use directly the variable $PWD.

    rsync -a "$PWD" ~/backup/
    
8
  • This is better solution..! Actually I just wanted to create an alias like ("backupme") So I can easily take backup of current directory by executing that command. This command is very useful and now I am going to remove that script and use this instead. Thank You..!
    – B.A.B
    Commented Apr 24, 2015 at 3:44
  • This command works! But when I am creating an alias and executing that alias it just takes the backup of my home directory instead of current directory.
    – B.A.B
    Commented Apr 24, 2015 at 4:10
  • 1
    Try to use single quote ' in the alias definition: alias BACKUPNOW='rsync -a $(pwd) ~/backup/'
    – Hastur
    Commented Apr 24, 2015 at 6:56
  • Examples often are better than words. It is not in aliasing, it is in bash. ;) Till you are curious do a wide use of man bash (or another command) or help alias if the command is a built-in... Ok man bash is a wide output to start with... but in general you can do it.
    – Hastur
    Commented Apr 24, 2015 at 7:10
  • 1
    @NavidHt Thanks for the spot. Updated. Note that you can avoid at all the subshell with the use of the variable PWD, "$PWD".
    – Hastur
    Commented May 3, 2016 at 15:13
2

Found a solution:

Created a new shell script like this:

current_dir=`pwd`
dir_name=`basename $current_dir`
rsync -a . ~/backup/$dir_name

and when executing this it will create a new directory at the destination and copy current folder contents.

1
  • Clear and understandable script. Usually you can find the suggestion to use the syntax current_dir=$(pwd) instead of current_dir=`pwd` for compatibility reasons even if they perform the same action.
    – Hastur
    Commented Apr 23, 2015 at 12:40

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .