diff -Naur cvs/src/baconfig.h my/src/baconfig.h --- cvs/src/baconfig.h 2006-12-30 17:01:49.000000000 +0100 +++ my/src/baconfig.h 2006-12-30 17:01:34.000000000 +0100 @@ -571,10 +571,12 @@ * Replace codes needed in both file routines and non-file routines * Job replace codes -- in "replace" */ -#define REPLACE_ALWAYS 'a' -#define REPLACE_IFNEWER 'w' -#define REPLACE_NEVER 'n' -#define REPLACE_IFOLDER 'o' +#define REPLACE_ALWAYS 'a' +#define REPLACE_IFNEWER 'w' +#define REPLACE_NEVER 'n' +#define REPLACE_IFOLDER 'o' +#define REPLACE_ATTR_ALWAYS 'r' +#define REPLACE_ATTR_IFEXISTS 's' /* This probably should be done on a machine by machine basis, but it works */ /* This is critical for the smartalloc routines to properly align memory */ diff -Naur cvs/src/dird/dird_conf.c my/src/dird/dird_conf.c --- cvs/src/dird/dird_conf.c 2006-12-22 20:47:00.000000000 +0100 +++ my/src/dird/dird_conf.c 2006-12-30 17:30:42.000000000 +0100 @@ -467,6 +467,8 @@ {"ifnewer", REPLACE_IFNEWER}, {"ifolder", REPLACE_IFOLDER}, {"never", REPLACE_NEVER}, + {"attributes", REPLACE_ATTR_ALWAYS}, + {"attributesifexists", REPLACE_ATTR_IFEXISTS}, {NULL, 0} }; diff -Naur cvs/src/filed/restore.c my/src/filed/restore.c --- cvs/src/filed/restore.c 2006-12-21 13:53:48.000000000 +0100 +++ my/src/filed/restore.c 2006-12-30 17:22:29.000000000 +0100 @@ -383,6 +383,12 @@ extract = true; } #endif + if (jcr->replace == REPLACE_ATTR_ALWAYS || + jcr->replace == REPLACE_ATTR_IFEXISTS) + { + extract = false; /* we just want attributes */ + } + if (!extract) { /* set attributes now because file will not be extracted */ set_attributes(jcr, attr, &bfd); diff -Naur cvs/src/findlib/create_file.c my/src/findlib/create_file.c --- cvs/src/findlib/create_file.c 2006-12-20 20:48:59.000000000 +0100 +++ my/src/findlib/create_file.c 2006-12-30 17:29:17.000000000 +0100 @@ -135,9 +135,17 @@ Qmsg(jcr, M_SKIPPED, 0, _("File skipped. Already exists: %s\n"), attr->ofname); return CF_SKIP; + case REPLACE_ATTR_ALWAYS: + return CF_CREATED; + case REPLACE_ALWAYS: break; } + } else { /* File doesn't exists anymore */ + if (replace == REPLACE_ATTR_IFEXISTS) { + Qmsg(jcr, M_SKIPPED, 0, _("File skipped. Doesn't exists anymore: %s\n"), attr->ofname); + return CF_SKIP; + } } switch (attr->type) { case FT_RAW: /* raw device to be written */