diff -r 2dc61cc5a8ac -r 54819e984a19 dav/main.c --- a/dav/main.c Mon Oct 09 14:55:47 2017 +0200 +++ b/dav/main.c Thu Oct 12 20:37:46 2017 +0200 @@ -161,7 +161,7 @@ fprintf(stderr, " list [-altdepcR] [-u ] \n"); fprintf( stderr, - " get [-pcR] [-o ] [-u ] \n"); + " get [-pcRK] [-o ] [-u ] \n"); fprintf(stderr, " put [-pcR] [-k ] [-L ] \n"); fprintf(stderr, " mkdir [-pc] [-k ] [-L ] \n"); fprintf(stderr, " remove [-pc] [-L ] \n"); @@ -189,6 +189,7 @@ fprintf(stderr, " -R " "Recursively do the operation for all children\n"); + fprintf(stderr, " -K Keep already present files\n"); fprintf(stderr, " -o Write output to file\n"); fprintf( stderr, @@ -747,12 +748,27 @@ return 0; } + int isstdout = !strcmp(out, "-"); + if(cmd_getoption(a, "keep") && !isstdout) { + struct stat s; + if(stat(out, &s)) { + if(errno != ENOENT) { + perror("stat"); + } + } else { + if(cmd_getoption(a, "recursive")) { + printf("skip: %s\n", res->path); + } + return 0; + } + } + // print some status message in recursive mode if(cmd_getoption(a, "recursive")) { printf("get: %s\n", res->path); } - - FILE *fout = !strcmp(out, "-") ? stdout : fopen(out, "wb"); + + FILE *fout = isstdout ? stdout : fopen(out, "wb"); if(!fout) { fprintf(stderr, "cannot open output file\n"); return -1;