gregiolo
gregiolo

Reputation: 113

Rsync copies too many directories being executed via bash script

Originally I would like to sync directory (with all files and subdirectories) given in parameter in bash script.

I found this post: How can I recursively copy a directory into another and replace only the files that have not changed? which explains how to use rsync in similar case.

My bash script is quite simple and listed below:

#!/bin/bash
echo -e "Type the project to be deployed: \c "
read project
echo -e "* Deploying: $project *"    
echo -e "Sync: /var/repo/released/$project"
echo -e "      /var/www/released/$project"

rsync -pr /var/repo/released/$project /var/www/released/$project

As a result it copies everything within /released (there are many directories in there, let's say -projects-).

I would like to copy (sync) only project given in parameter.

Could you please advice how to do this?

Upvotes: 1

Views: 192

Answers (1)

Ansgar Wiechers
Ansgar Wiechers

Reputation: 200233

When you call the script without an argument (which most likely is what you're doing since you interactively read the project name into the variable $project), the positional parameter $1 remains empty. Therefore the script will rsync the entire content of /var/repo/released/.

You need to replace $1 with $project in your script. Also, I'd recommend to put double quotes around the paths to avoid problems due to spaces in a directory name.

rsync -pr "/var/repo/released/$project" "/var/www/released/$project"

Upvotes: 1

Related Questions