---
name: "Rex::Commands::Rsync"
section: "3pm"
platform: "linux"
package: "rex"
version: "1.16.0-1"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/Rex::Commands::Rsync"
---

# Rex::Commands::Rsync(3pm)

Simple Rsync Frontend

## NAME

Rex::Commands::Rsync - Simple Rsync Frontend

## DESCRIPTION

With this module you can sync 2 directories via the *rsync* command.

Version \<= 1.0: All these functions will not be reported.

All these functions are not idempotent.

## DEPENDENCIES

- Expect

  The *Expect* Perl module is required to be installed on the machine executing the rsync task.

- rsync

  The *rsync* command has to be installed on both machines involved in the execution of the rsync task.

## SYNOPSIS

```
 use Rex::Commands::Rsync;
 sync "dir1", "dir2";
```

## EXPORTED FUNCTIONS

### sync($source, $dest, $opts)

This function executes the rsync command *on the local machine* (where rex is being run) to sync `$source` and `$dest` with a remote. The `"rsync"` command is invoked with the `"--recursive --links --verbose --stats"` options set.

If you want to use sudo, you need to disable *requiretty* option for this user. You can do this with the following snippet in your sudoers configuration.

```
 Defaults:username !requiretty
```

- UPLOAD - Will upload all from the local directory *html* to the remote directory */var/www/html*.

  ```
   task "sync", "server01", sub {
     sync "html/*", "/var/www/html", {
      exclude => "*.sw*",
      parameters => '--backup --delete',
     };
   };
   task "sync", "server01", sub {
     sync "html/*", "/var/www/html", {
      exclude => ["*.sw*", "*.tmp"],
      parameters => '--backup --delete',
     };
   };
  ```

- DOWNLOAD - Will download all from the remote directory */var/www/html* to the local directory *html*.

  ```
   task "sync", "server01", sub {
     sync "/var/www/html/*", "html/", {
      download => 1,
      parameters => '--backup',
     };
   };
  ```
