(pseudo) incremental backup with different exclude lists using hardlinks and rsync
Based on patches by John Lawless <jlawless@redwoodscientific.com>.
Skipped the sort changing part (from -tc to -t)
c.patch:
--- ccollect-0.7.1-b.sh 2009-05-24 21:32:00.000000000 -0700
+++ ccollect-0.7.1-c.sh 2009-05-24 21:39:43.000000000 -0700
@@ -40,10 +40,13 @@
VERSION=0.7.1
RELEASE="2009-02-02"
HALF_VERSION="ccollect ${VERSION}"
FULL_VERSION="ccollect ${VERSION} (${RELEASE})"
+#TSORT="tc" ; NEWER="cnewer"
+TSORT="t" ; NEWER="newer"
+
#
# CDATE: how we use it for naming of the archives
# DDATE: how the user should see it in our output (DISPLAY)
#
CDATE="date +%Y%m%d-%H%M"
@@ -513,14 +516,14 @@
#
# Check for backup directory to clone from: Always clone from the latest one!
#
- # Use ls -1c instead of -1t, because last modification maybe the same on all
- # and metadate update (-c) is updated by rsync locally.
- #
- last_dir="$(pcmd ls -tcp1 "${ddir}" | grep '/$' | head -n 1)" || \
+ # Depending on your file system, you may want to sort on:
+ # 1. mtime (modification time) with TSORT=t, or
+ # 2. ctime (last change time, usually) with TSORT=tc
+ last_dir="$(pcmd ls -${TSORT}p1 "${ddir}" | grep '/$' | head -n 1)" || \
_exit_err "Failed to list contents of ${ddir}."
#
# clone from old backup, if existing
#
d.patch:
--- ccollect-0.7.1-c.sh 2009-05-24 21:39:43.000000000 -0700
+++ ccollect-0.7.1-d.sh 2009-05-24 21:47:09.000000000 -0700
@@ -492,12 +492,12 @@
if [ "${count}" -ge "${c_interval}" ]; then
substract=$((${c_interval} - 1))
remove=$((${count} - ${substract}))
_techo "Removing ${remove} backup(s)..."
- pcmd ls -p1 "$ddir" | grep "^${INTERVAL}\..*/\$" | \
- sort -n | head -n "${remove}" > "${TMP}" || \
+ pcmd ls -${TSORT}p1r "$ddir" | grep "^${INTERVAL}\..*/\$" | \
+ head -n "${remove}" > "${TMP}" || \
_exit_err "Listing old backups failed"
i=0
while read to_remove; do
eval remove_$i=\"${to_remove}\"
Signed-off-by: Nico Schottelius <nico@ikn.schottelius.org>
|
||
|---|---|---|
| conf | ||
| contrib | ||
| doc | ||
| test | ||
| tools | ||
| .gitignore | ||
| ccollect.sh | ||
| COPYING | ||
| CREDITS | ||
| Makefile | ||
| README | ||
| release.sh | ||
-------------------------------------------------------------------------------- ccollect.sh, Nico Schottelius, 2005-12-06 -------------------------------------------------------------------------------- ccollect backups (local or remote) data to local or remote destinations. You can retrieve the latest version of ccollect at [0]. ccollect was inspired by rsnapshot [1], which has some problems: - configuration parameters has to be TAB seperated - you can not specify per source exclude lists - no per source pre/post execution support - no parallel execution - does unecessary moving of backup directories - I didn't like the configuration at all, so I used the cconfig style [2]. Please use tools/report_success.sh to report success, if you are successfully using ccollect. A small try to visualize the differences in a table: +---------------+-------------------------------------------------------------+ | What? | rsnapshot | ccollect | +---------------+-------------------------------------------------------------+ | Configuration | tab separated, needs | plain cconfig-style | | | parsing | | +---------------+-------------------------------------------------------------+ | Per source | | | | post-/pre- | no | yes | | execution | | | +---------------+-------------------------------------------------------------+ | Per source | | | | exclude lists | no | yes | +---------------+-------------------------------------------------------------+ | Parallel | | | | execution | | | | of multiple | no | yes | | backups | | | +---------------+-------------------------------------------------------------+ | Programming | perl | sh | | language | | (posix compatible) | +---------------+-------------------------------------------------------------+ | Lines of code | 6772 (5353 w/o comments, | 546 (375 w/o comments, | | (2006-10-25) | 4794 w/o empty lines) | 288 w/o empty lines) | +---------------+-------------------------------------------------------------+ | Age | Available since 2002/2003 | Written at 2005-11-14 | +---------------+-------------------------------------------------------------+ Included documentation: doc/ccollect.text Manual in text format doc/ccollect.html Manual in xhtml (generated) doc/ccollect-DE.text German manual in text format (externally maintained) doc/ccollect-DE.html German manual in xhtml (generated) doc/man/ccollect.text Manpage in text format doc/man/ccollect.man Manpage in manpage format (generated) -------------------------------------------------------------------------------- [0]: ccollect: http://unix.schottelius.org/ccollect/ [1]: rsnapshot: http://www.rsnapshot.org/ [2]: cconfig: http://nico.schotteli.us/papers/linux/cconfig/