From 42e3d5a6499e714d6a10fc6909834c261e418bc5 Mon Sep 17 00:00:00 2001 From: kientzle Date: Mon, 7 Jun 2004 03:49:48 +0000 Subject: The --include='pattern' option is the natural counterpart to --exclude='pattern'. I should have added this a long time ago, since it's so useful for testing. In particular, it allows me to select a few entries from a troublesome archive so that I can easily focus my debugging efforts: bsdtar -czf new.tgz --include='*foo*' @old.tgz --- usr.bin/tar/bsdtar.1 | 18 ++++++++++++++++++ usr.bin/tar/bsdtar.c | 7 +++++++ 2 files changed, 25 insertions(+) (limited to 'usr.bin') diff --git a/usr.bin/tar/bsdtar.1 b/usr.bin/tar/bsdtar.1 index 994d639..4d36d09 100644 --- a/usr.bin/tar/bsdtar.1 +++ b/usr.bin/tar/bsdtar.1 @@ -195,6 +195,24 @@ target of the link will be archived, not the link itself. (c and r mode only) Synonym for .Fl L . +.It Fl -include Ar pattern +Process only files or directories that match the specified pattern. +Note that exclusions specified with +.Fl -exclude +take precedence over inclusions. +If no inclusions are explicitly specified, all entries are processed by +default. +The +.Fl -include +option is especially useful when filtering archives. +For example, the command +.Dl Nm Fl c Fl f Pa new.tar Fl -include='*foo*' Cm @ Ns Pa old.tgz +creates a new archive +.Pa new.tar +containing only the entries from +.Pa old.tgz +containing the string +.Sq foo . .It Fl j (c mode only) Compress the resulting archive with diff --git a/usr.bin/tar/bsdtar.c b/usr.bin/tar/bsdtar.c index ccf7c28..7092fc0 100644 --- a/usr.bin/tar/bsdtar.c +++ b/usr.bin/tar/bsdtar.c @@ -74,6 +74,7 @@ const char *tar_opts = "Bb:C:cF:f:HhjkLlmnOoPprtT:UuvwXxyZz"; #define OPTION_FAST_READ 2 #define OPTION_NODUMP 3 #define OPTION_HELP 4 +#define OPTION_INCLUDE 5 const struct option tar_longopts[] = { { "absolute-paths", no_argument, NULL, 'P' }, @@ -95,6 +96,7 @@ const struct option tar_longopts[] = { { "gunzip", no_argument, NULL, 'z' }, { "gzip", no_argument, NULL, 'z' }, { "help", no_argument, NULL, OPTION_HELP }, + { "include", required_argument, NULL, OPTION_INCLUDE }, { "interactive", no_argument, NULL, 'w' }, { "keep-old-files", no_argument, NULL, 'k' }, { "list", no_argument, NULL, 't' }, @@ -228,6 +230,11 @@ main(int argc, char **argv) long_help(bsdtar); break; #endif +#ifdef HAVE_GETOPT_LONG + case OPTION_INCLUDE: + include(bsdtar, optarg); + break; +#endif case 'j': /* GNU tar */ if (bsdtar->create_compression != '\0') bsdtar_errc(bsdtar, 1, 0, -- cgit v1.1