syncthing/man/syncthing-versioning.7

202 lines
6.8 KiB
Groff
Raw Normal View History

2015-05-30 11:05:37 +00:00
.\" Man page generated from reStructuredText.
.
.TH "SYNCTHING-VERSIONING" "7" "Aug 08, 2018" "v0.14" "Syncthing"
2015-05-30 11:05:37 +00:00
.SH NAME
2016-10-07 02:09:19 +00:00
syncthing-versioning \- Keep automatic backups of deleted files by other nodes
2015-05-30 11:05:37 +00:00
.
.nr rst2man-indent-level 0
.
.de1 rstReportMargin
\\$1 \\n[an-margin]
level \\n[rst2man-indent-level]
level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
-
\\n[rst2man-indent0]
\\n[rst2man-indent1]
\\n[rst2man-indent2]
..
.de1 INDENT
.\" .rstReportMargin pre:
. RS \\$1
. nr rst2man-indent\\n[rst2man-indent-level] \\n[an-margin]
. nr rst2man-indent-level +1
.\" .rstReportMargin post:
..
.de UNINDENT
. RE
.\" indent \\n[an-margin]
.\" old: \\n[rst2man-indent\\n[rst2man-indent-level]]
.nr rst2man-indent-level -1
.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
.in \\n[rst2man-indent\\n[rst2man-indent-level]]u
..
.sp
2015-06-14 11:52:00 +00:00
Syncthing supports archiving the old version of a file when it is deleted or
2017-11-29 06:45:17 +00:00
replaced with a newer version from the cluster. This is called “file
versioning” and uses one of the available \fIversioning strategies\fP described
below. File versioning is configured per folder, on a per\-device basis, and
2017-11-29 06:45:17 +00:00
defaults to “no file versioning”, i.e. no old copies of files are kept.
2015-06-14 11:52:00 +00:00
.SH TRASH CAN FILE VERSIONING
2015-05-30 11:05:37 +00:00
.sp
2017-11-29 06:45:17 +00:00
This versioning strategy emulates the common “trash can” approach. When a file
2015-06-14 11:52:00 +00:00
is deleted or replaced due to a change on a remote device, it is a moved to
the trash can in the \fB\&.stversions\fP folder. If a file with the same name was
already in the trash can it is replaced.
.sp
A configuration option is available to clean the trash can from files older
than a specified number of days. If this is set to a positive number of days,
files will be removed when they have been in the trash can that long. Setting
this to zero prevents any files from being removed from the trash can
automatically.
2015-05-30 11:05:37 +00:00
.SH SIMPLE FILE VERSIONING
.sp
2017-11-29 06:45:17 +00:00
With “Simple File Versioning” files are moved to the \fB\&.stversions\fP folder
2015-05-30 11:05:37 +00:00
(inside your shared folder) when replaced or deleted on a remote device. This
2017-11-29 06:45:17 +00:00
option also takes a value in an input titled “Keep Versions” which tells
2015-06-02 06:33:36 +00:00
Syncthing how many old versions of the file it should keep. For example, if
you set this value to 5, if a file is replaced 5 times on a remote device, you
2017-11-29 06:45:17 +00:00
will see 5 time\-stamped versions on that file in the “.stversions” folder on
2015-06-02 06:33:36 +00:00
the other devices sharing the same folder.
2015-05-30 11:05:37 +00:00
.SH STAGGERED FILE VERSIONING
.sp
2017-11-29 06:45:17 +00:00
With “Staggered File Versioning” files are also moved to a different folder
when replaced or deleted on a remote device (just like “Simple File
Versioning”), however, versions are automatically deleted if they are older
2015-06-02 06:33:36 +00:00
than the maximum age or exceed the number of files allowed in an interval.
.sp
2017-11-29 06:45:17 +00:00
With this versioning method its possible to specify where the versions are
2015-06-14 11:52:00 +00:00
stored, with the default being the \fB\&.stversions\fP folder inside the normal
2017-11-29 06:45:17 +00:00
folder path. If you set a custom version path, please ensure that its on the
2015-06-02 06:33:36 +00:00
same partition or filesystem as the regular folder path, as moving files there
may otherwise fail. You can use an absolute path (this is recommended) or a
2017-11-29 06:45:17 +00:00
relative path. Relative paths are interpreted relative to Syncthings current
2015-06-02 06:33:36 +00:00
or startup directory.
2015-05-30 11:05:37 +00:00
.sp
The following intervals are used and they each have a maximum number of files
that will be kept for each.
.INDENT 0.0
.TP
.B 1 Hour
For the first hour, the most recent version is kept every 30 seconds.
.TP
.B 1 Day
For the first day, the most recent version is kept every hour.
.TP
.B 30 Days
For the first 30 days, the most recent version is kept every day.
.TP
.B Until Maximum Age
2016-10-07 02:09:19 +00:00
Until maximum age, the most recent version is kept every week.
.TP
.B Maximum Age
2015-05-30 11:05:37 +00:00
The maximum time to keep a version in days. For example, to keep replaced or
2017-11-29 06:45:17 +00:00
deleted files in the “.stversions” folder for an entire year, use 365. If
2016-10-07 02:09:19 +00:00
only for 10 days, use 10. \fBNote: Set to 0 to keep versions forever.\fP
2015-05-30 11:05:37 +00:00
.UNINDENT
2015-06-02 06:33:36 +00:00
.SH EXTERNAL FILE VERSIONING
.sp
This versioning method delegates the decision on what to do to an external
command (program or script).
Just prior to a file being replaced, the command will be run.
The command should be specified as an absolute path, and can use the following templated arguments:
.INDENT 0.0
.TP
.B %FOLDER_PATH%
Path to the folder
.TP
.B %FILE_PATH%
Path to the file within the folder
.UNINDENT
2015-06-02 06:33:36 +00:00
.SS Example for Unixes
.sp
Lets say I want to keep the latest version of each file as they are replaced
2017-11-29 06:45:17 +00:00
or removed; essentially I want a “trash can”\-like behavior. For this, I create
2015-06-02 06:33:36 +00:00
the following script and store it as \fB/Users/jb/bin/onlylatest.sh\fP (i.e. the
\fBbin\fP directory in my home directory):
.INDENT 0.0
.INDENT 3.5
.sp
.nf
.ft C
#!/bin/sh
set \-eu
# Where I want my versions stored
versionspath=~/.trashcan
# The parameters we get from Syncthing
folderpath="$1"
filepath="$2"
# First ensure the dir where we need to store the file exists
2016-01-03 08:56:33 +00:00
outpath=\(gadirname "$versionspath/$filepath"\(ga
mkdir \-p "$outpath"
2015-06-02 06:33:36 +00:00
# Then move the file there
mv \-f "$folderpath/$filepath" "$versionspath/$filepath"
.ft P
.fi
.UNINDENT
.UNINDENT
.sp
I must ensure that the script has execute permissions (\fBchmod 755
onlylatest.sh\fP), then configure Syncthing with command \fB/Users/jb/bin/onlylatest.sh %FOLDER_PATH% %FILE_PATH%\fP
2015-06-02 06:33:36 +00:00
.sp
2017-11-29 06:45:17 +00:00
Lets assume I have a folder “default” in ~/Sync, and that within that folder
2015-06-02 06:33:36 +00:00
there is a file \fBdocs/letter.txt\fP that is being replaced or deleted. The
script will be called as if I ran this from the command line:
.INDENT 0.0
.INDENT 3.5
.sp
.nf
.ft C
$ /Users/jb/bin/onlylatest.sh /Users/jb/Sync docs/letter.txt
.ft P
.fi
.UNINDENT
.UNINDENT
.sp
The script will then move the file in question to
\fB~/.trashcan/docs/letter.txt\fP, replacing any previous version of that letter
that may already have been there.
.SS Example for Windows
.sp
2017-11-29 06:45:17 +00:00
On Windows we can use a batch script to perform the same “trash can”\-like
behavior as mentioned above. I created the following script and saved it as
\fBC:\eUsers\emfrnd\eScripts\eonlylatest.bat\fP\&.
.INDENT 0.0
.INDENT 3.5
.sp
.nf
.ft C
@echo off
:: We need command extensions for mkdir to create intermediate folders in one go
setlocal EnableExtensions
:: Where I want my versions stored
set VERSIONS_PATH=%USERPROFILE%\e.trashcan
:: The parameters we get from Syncthing, \(aq~\(aq removes quotes if any
set FOLDER_PATH=%~1
set FILE_PATH=%~2
:: First ensure the dir where we need to store the file exists
for %%F in ("%VERSIONS_PATH%\e%FILE_PATH%") do set OUTPUT_PATH=%%~dpF
if not exist "%OUTPUT_PATH%" mkdir "%OUTPUT_PATH%" || exit /B
:: Finally move the file, overwrite existing file if any
move /Y "%FOLDER_PATH%\e%FILE_PATH%" "%VERSIONS_PATH%\e%FILE_PATH%"
.ft P
.fi
.UNINDENT
.UNINDENT
.sp
Finally, I set \fBC:\eUsers\emfrnd\eScripts\eonlylatest.bat %FOLDER_PATH% %FILE_PATH%\fP as command name in
Syncthing.
2015-05-30 11:05:37 +00:00
.SH AUTHOR
The Syncthing Authors
.SH COPYRIGHT
2018-02-07 06:45:17 +00:00
2014-2018, The Syncthing Authors
2015-05-30 11:05:37 +00:00
.\" Generated by docutils manpage writer.
.