mirror of
https://github.com/RsyncProject/rsync.git
synced 2026-03-10 02:16:35 -04:00
allow the specification of multiple filenames (with or without
wildcards) to a rsync server. For example you can do: rsync -avz samba::'ftp/pub/samba/README ftp/pub/samba/*.gz' .
This commit is contained in:
@@ -212,7 +212,7 @@ static int rsync_module(int fd, int i)
|
||||
}
|
||||
|
||||
if (start_glob) {
|
||||
glob_expand(argv, &argc, MAX_ARGS);
|
||||
glob_expand(name, argv, &argc, MAX_ARGS);
|
||||
} else {
|
||||
argc++;
|
||||
}
|
||||
|
||||
31
util.c
31
util.c
@@ -506,15 +506,18 @@ int lock_range(int fd, int offset, int len)
|
||||
}
|
||||
|
||||
|
||||
void glob_expand(char **argv, int *argc, int maxargs)
|
||||
static void glob_expand_one(char *s, char **argv, int *argc, int maxargs)
|
||||
{
|
||||
#ifndef HAVE_GLOB
|
||||
argv[*argc] = strdup(s);
|
||||
(*argc)++;
|
||||
return;
|
||||
#else
|
||||
glob_t globbuf;
|
||||
int i;
|
||||
|
||||
argv[*argc] = strdup(s);
|
||||
|
||||
memset(&globbuf, 0, sizeof(globbuf));
|
||||
glob(argv[*argc], 0, NULL, &globbuf);
|
||||
if (globbuf.gl_pathc == 0) {
|
||||
@@ -532,6 +535,32 @@ void glob_expand(char **argv, int *argc, int maxargs)
|
||||
#endif
|
||||
}
|
||||
|
||||
void glob_expand(char *base, char **argv, int *argc, int maxargs)
|
||||
{
|
||||
char *s = argv[*argc];
|
||||
char *p, *q;
|
||||
|
||||
if (!s || !*s) return;
|
||||
|
||||
s = strdup(s);
|
||||
if (!s) out_of_memory("glob_expand");
|
||||
|
||||
q = s;
|
||||
while ((p = strstr(q,base)) && ((*argc) < maxargs)) {
|
||||
if (p != q && *(p-1) == ' ' && p[strlen(base)] == '/') {
|
||||
/* split it at this point */
|
||||
*(p-1) = 0;
|
||||
glob_expand_one(q, argv, argc, maxargs);
|
||||
q = p+strlen(base);
|
||||
} else {
|
||||
q++;
|
||||
}
|
||||
}
|
||||
|
||||
if (*q && (*argc < maxargs)) glob_expand_one(q, argv, argc, maxargs);
|
||||
|
||||
free(s);
|
||||
}
|
||||
|
||||
/*******************************************************************
|
||||
convert a string to lower case
|
||||
|
||||
Reference in New Issue
Block a user