[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Exclude patterns in tarsnaprc
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
Jamie,
Many thanks for your timely intervention and very clear explanation.
Perhaps the manpage could include some examples?
Bob
On 10/06/14 11:00, Jamie Landeg-Jones wrote:
> NOOOOOOOO!
>
> If you remove the leading '/' off your exclude pattern, it will
> exclude any match of that directory in the tree. Even excludes of 2
> or more directory levels, e.g. "--exclude usr/src" would match
> usr/users/jamie/usr/src
>
> To exclude reliably, you have to 'anchor' the path to root by
> preceding it with '/' - You must also specify your backup path
> preceeding with '/' for anchoring to work at all.
>
> Don't forget you can test this using the '--dry-run' parameter.
>
> I include a test script, and it's output to demonstrate.
>
> Here's how it works:
>
> Exclude patterns are applied *before* any leading '/' is
> potentially stripped or not.
>
> The format you use therefore depends upon whether you use a
> relative or absolute backup path.
>
> So, for example, to exclude /usr/src would be done in different
> ways depending on how you call it:
>
> 1) tarsnap cf --exclude /usr/src blah.tar /
>
> or:
>
> 2) cd / && tarsnap cf --exclude ./usr/src blah.tar .
>
> or:
>
> 3) cd / && tarsnap cf --exclude usr/src blah.tar usr
>
> 4) cd /usr && tarsnap cf --exclude ./src blah.tar .
>
> NOTE: The *only* way to reliably specify a path is if you use
> absolute pathnames throughout. (Remember, leading '/' stripping
> happens after pattern-matching)
>
> I.E. --exclude usr/src would also exclude
> usr/users/jamie/usr/src/important-stuff
>
> Check the sample script and output below. Note how
> 'important-stuff-to-backup' is excluded in every scenario.
>
> cheers, jamie
>
> jamie has logged on pts/4 from tabbycat6.dyslexicfish.net 10:57 [2]
> (1) "jamie" root@lapcat# cat tarsnaptest
>
> #!/bin/sh # ----------------------------------------- do_cmd() {
> echo echo "$@" echo '--------------------------' "$@" } #
> -----------------------------------------
>
> tmpdir="$(mktemp -d)" || exit 1 cd "$tmpdir" || exit 1
>
> mkdir -p usr/src/bin mkdir -p usr/src/devel/usr/src mkdir -p
> usr/src/devel/usr/bin mkdir -p usr/local/etc/rc.d mkdir -p usr/lib
> mkdir -p usr/include/sys mkdir -p usr/users/jamie/bin mkdir -p
> usr/users/jamie/myproject/src/2014 mkdir -p
> usr/users/jamie/devel/temp/usr/src/important-stuff-to-backup-1
> mkdir -p
> usr/users/jamie/devel/temp/usr/src/important-stuff-to-backup-2
> mkdir -p
> usr/users/jamie/devel/temp/usr/src/important-stuff-to-backup-3/out
> mkdir -p /etc/ssl mkdir -p var/db/tarsnap mkdir -p var/log
>
> find . -type d -exec touch {}/dummyfile \;
>
> do_cmd find . -print do_cmd tarsnap cvf dummy.tar --dry-run
> --no-print-stats --exclude ./usr/src . do_cmd tarsnap cvf
> dummy.tar --dry-run --no-print-stats --exclude usr/src usr do_cmd
> tarsnap cvf dummy.tar --dry-run --no-print-stats --exclude ./src .
>
> rm -rf "$tmpdir"
>
> 10:57 [2] (2) "jamie" root@lapcat# sh tarsnaptest
>
> find . -print -------------------------- . ./dummyfile ./var
> ./var/log ./var/log/dummyfile ./var/dummyfile ./var/db
> ./var/db/tarsnap ./var/db/tarsnap/dummyfile ./var/db/dummyfile
> ./usr ./usr/include ./usr/include/dummyfile ./usr/include/sys
> ./usr/include/sys/dummyfile ./usr/users ./usr/users/jamie
> ./usr/users/jamie/myproject ./usr/users/jamie/myproject/dummyfile
> ./usr/users/jamie/myproject/src
> ./usr/users/jamie/myproject/src/2014
> ./usr/users/jamie/myproject/src/2014/dummyfile
> ./usr/users/jamie/myproject/src/dummyfile ./usr/users/jamie/bin
> ./usr/users/jamie/bin/dummyfile ./usr/users/jamie/devel
> ./usr/users/jamie/devel/temp
> ./usr/users/jamie/devel/temp/dummyfile
> ./usr/users/jamie/devel/temp/usr
> ./usr/users/jamie/devel/temp/usr/dummyfile
> ./usr/users/jamie/devel/temp/usr/src
> ./usr/users/jamie/devel/temp/usr/src/important-stuff-to-backup-3
> ./usr/users/jamie/devel/temp/usr/src/important-stuff-to-backup-3/dummyfile
>
>
./usr/users/jamie/devel/temp/usr/src/important-stuff-to-backup-3/out
> ./usr/users/jamie/devel/temp/usr/src/important-stuff-to-backup-3/out/dummyfile
>
>
./usr/users/jamie/devel/temp/usr/src/important-stuff-to-backup-2
> ./usr/users/jamie/devel/temp/usr/src/important-stuff-to-backup-2/dummyfile
>
>
./usr/users/jamie/devel/temp/usr/src/important-stuff-to-backup-1
> ./usr/users/jamie/devel/temp/usr/src/important-stuff-to-backup-1/dummyfile
>
>
./usr/users/jamie/devel/temp/usr/src/dummyfile
> ./usr/users/jamie/devel/dummyfile ./usr/users/jamie/dummyfile
> ./usr/users/dummyfile ./usr/lib ./usr/lib/dummyfile
> ./usr/dummyfile ./usr/src ./usr/src/bin ./usr/src/bin/dummyfile
> ./usr/src/devel ./usr/src/devel/dummyfile ./usr/src/devel/usr
> ./usr/src/devel/usr/bin ./usr/src/devel/usr/bin/dummyfile
> ./usr/src/devel/usr/dummyfile ./usr/src/devel/usr/src
> ./usr/src/devel/usr/src/dummyfile ./usr/src/dummyfile ./usr/local
> ./usr/local/dummyfile ./usr/local/etc ./usr/local/etc/dummyfile
> ./usr/local/etc/rc.d ./usr/local/etc/rc.d/dummyfile
>
> tarsnap cvf dummy.tar --dry-run --no-print-stats --exclude
> ./usr/src . -------------------------- a . a ./dummyfile a ./var a
> ./usr a ./usr/include a ./usr/users a ./usr/lib a ./usr/dummyfile a
> ./usr/local a ./usr/local/dummyfile a ./usr/local/etc a
> ./usr/local/etc/dummyfile a ./usr/local/etc/rc.d a
> ./usr/local/etc/rc.d/dummyfile a ./usr/lib/dummyfile a
> ./usr/users/jamie a ./usr/users/dummyfile a
> ./usr/users/jamie/myproject a ./usr/users/jamie/bin a
> ./usr/users/jamie/devel a ./usr/users/jamie/dummyfile a
> ./usr/users/jamie/devel/temp a ./usr/users/jamie/devel/dummyfile a
> ./usr/users/jamie/devel/temp/dummyfile a
> ./usr/users/jamie/devel/temp/usr a
> ./usr/users/jamie/devel/temp/usr/dummyfile a
> ./usr/users/jamie/bin/dummyfile a
> ./usr/users/jamie/myproject/dummyfile a
> ./usr/users/jamie/myproject/src a
> ./usr/users/jamie/myproject/src/2014 a
> ./usr/users/jamie/myproject/src/dummyfile a
> ./usr/users/jamie/myproject/src/2014/dummyfile a
> ./usr/include/dummyfile a ./usr/include/sys a
> ./usr/include/sys/dummyfile a ./var/log a ./var/dummyfile a
> ./var/db a ./var/db/tarsnap a ./var/db/dummyfile a
> ./var/db/tarsnap/dummyfile a ./var/log/dummyfile
>
> tarsnap cvf dummy.tar --dry-run --no-print-stats --exclude usr/src
> usr -------------------------- a usr a usr/include a usr/users a
> usr/lib a usr/dummyfile a usr/local a usr/local/dummyfile a
> usr/local/etc a usr/local/etc/dummyfile a usr/local/etc/rc.d a
> usr/local/etc/rc.d/dummyfile a usr/lib/dummyfile a usr/users/jamie
> a usr/users/dummyfile a usr/users/jamie/myproject a
> usr/users/jamie/bin a usr/users/jamie/devel a
> usr/users/jamie/dummyfile a usr/users/jamie/devel/temp a
> usr/users/jamie/devel/dummyfile a
> usr/users/jamie/devel/temp/dummyfile a
> usr/users/jamie/devel/temp/usr a
> usr/users/jamie/devel/temp/usr/dummyfile a
> usr/users/jamie/bin/dummyfile a
> usr/users/jamie/myproject/dummyfile a
> usr/users/jamie/myproject/src a usr/users/jamie/myproject/src/2014
> a usr/users/jamie/myproject/src/dummyfile a
> usr/users/jamie/myproject/src/2014/dummyfile a
> usr/include/dummyfile a usr/include/sys a
> usr/include/sys/dummyfile
>
> tarsnap cvf dummy.tar --dry-run --no-print-stats --exclude ./src .
> -------------------------- a . a ./dummyfile a ./var a ./usr a
> ./usr/include a ./usr/users a ./usr/lib a ./usr/dummyfile a
> ./usr/local a ./usr/local/dummyfile a ./usr/local/etc a
> ./usr/local/etc/dummyfile a ./usr/local/etc/rc.d a
> ./usr/local/etc/rc.d/dummyfile a ./usr/lib/dummyfile a
> ./usr/users/jamie a ./usr/users/dummyfile a
> ./usr/users/jamie/myproject a ./usr/users/jamie/bin a
> ./usr/users/jamie/devel a ./usr/users/jamie/dummyfile a
> ./usr/users/jamie/devel/temp a ./usr/users/jamie/devel/dummyfile a
> ./usr/users/jamie/devel/temp/dummyfile a
> ./usr/users/jamie/devel/temp/usr a
> ./usr/users/jamie/devel/temp/usr/dummyfile a
> ./usr/users/jamie/bin/dummyfile a
> ./usr/users/jamie/myproject/dummyfile a ./usr/include/dummyfile a
> ./usr/include/sys a ./usr/include/sys/dummyfile a ./var/log a
> ./var/dummyfile a ./var/db a ./var/db/tarsnap a ./var/db/dummyfile
> a ./var/db/tarsnap/dummyfile a ./var/log/dummyfile
>
> 10:57 [2] (3) "jamie" root@lapcat#
>
>
> Script done on Tue Jun 10 10:57:29 2014
>
- --
Bob Williams
System: Linux 3.11.10-11-desktop
Distro: openSUSE 13.1 (x86_64) with KDE Development Platform: 4.13.1
Uptime: 06:00am up 2 days 11:36, 5 users, load average: 0.00, 0.05, 0.05
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2.0.22 (GNU/Linux)
Comment: Using GnuPG with Thunderbird - http://www.enigmail.net/
iEYEARECAAYFAlOXAbkACgkQ0Sr7eZJrmU639wCggRHYXy2gg1VkZ1/7PaTmO6g7
S8MAnj6ZdJXuxt/yNYVCFHcDs2g8Qs5O
=T2Mh
-----END PGP SIGNATURE-----