Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/spearfoot/scripts-for-using-rsync
Shell scripts for using rsync
https://github.com/spearfoot/scripts-for-using-rsync
freebsd freenas freenas-scripts rsync rsync-modules ssh
Last synced: 8 days ago
JSON representation
Shell scripts for using rsync
- Host: GitHub
- URL: https://github.com/spearfoot/scripts-for-using-rsync
- Owner: Spearfoot
- License: mit
- Created: 2020-08-10T16:12:26.000Z (over 4 years ago)
- Default Branch: master
- Last Pushed: 2020-10-10T13:29:56.000Z (about 4 years ago)
- Last Synced: 2024-02-13T22:07:49.095Z (9 months ago)
- Topics: freebsd, freenas, freenas-scripts, rsync, rsync-modules, ssh
- Language: Shell
- Homepage:
- Size: 157 KB
- Stars: 18
- Watchers: 2
- Forks: 4
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Scripts for using rsync
The __rsync__ command -- whether used standalone or installed as a module -- is a powerful tool for copying filesets between UNIX-style systems. It is very efficient in that it only copies new or changed data to the target system.
### Purpose
I wrote these wrapper scripts for the purpose of duplicating datasets from my primary to my secondary FreeNAS server. Because FreeNAS is based on FreeBSD, these scripts _might_ be somewhat FreeBSD-centric. But __rsync__ is a common tool on all UNIX-style systems, so it shouldn't take much effort to port the scripts to run successfully on Linux distributions, and in fact, I have used earlier versions of these scripts to transfer data to a Linux-based Synology Diskstation NAS system.
My goal was to copy new or changed files and also to delete files on the target that don't exist on the source. If your needs are different, particularly if you want to keep files on the target that have been deleted on the source, then you will need to remove the `--inplace` and `--delete-during` options used in the scripts.
### The Scripts
There are two scripts in this repository: one for use with modules (__rsync-module.sh__) and one to run __rsync__ directly (__rsync-invoke.sh__). Both scripts require 3 command-line arguments:
- The source specification, including username and hostname for remote systems - example: `/mnt/tank/foo/`
- The target specification, including username and hostname for remote systems - example: `root@boomer:/mnt/tank/foo`
- A log filenameTelling __rsync__ what to copy is a bit arcane: you have to be careful about placing the '/' character correctly. Basically, to copy a dataset from the source to the target you add a trailing '/' to the source specification and leave it off the target.
This is easier to explain with an example: to use __rsync-invoke.sh__ to copy local dataset __foo__ to remote server 'BOOMER', use this command line:
`./rsync-invoke.sh /mnt/tank/foo/ root@boomer:/mnt/tank/foo /mnt/tank/bandit/log/rsync.log`
Modules work a little differently when specifying the path. You don't separate the user and server names from the target path with a colon, and instead of providing the full path of the target, you specify the module name. Again, this is easier to demonstrate with an example:
`./rsync-module.sh /mnt/tank/foo/ root@boomer/tank/foo /mnt/tank/bandit/log/rsync.log`
After either of the examples above complete, you can examine log file `/mnt/tank/bandit/log/rsync.log` for results, which will look something like this:
```
+---------------------------------------------------------------------------------
+ Mon Aug 10 04:00:05 CDT 2020: Copy /mnt/tank/foo/ to root@boomer/tank/foo
+---------------------------------------------------------------------------------
2020/08/10 04:00:06 [10732] building file list
2020/08/10 04:00:37 [10732] *deleting ONYX/Macrium/onyx-system3-00-00.mrimg
2020/08/10 04:00:37 [10732] *deleting ONYX/Macrium/onyx-data3-00-00.mrimg
2020/08/10 04:00:37 [10732] .d..t...... ONYX/Macrium/
2020/08/10 04:00:37 [10732]