This is a discussion on scp patch to delete source files after copy within the OpenSSH Development forums, part of the Networking and Network Related category; At work we have a large collection of scripts to move log and config files around. These depend on commercial (...
|
|||||||
| FAQ | Members List | Calendar | Search | Today's Posts | Mark Forums Read |
|
|||
|
At work we have a large collection of scripts to move log
and config files around. These depend on commercial (F-Secure) ssh/scp, as it supports the -u option to delete the source file after (successful) copying. That is the sole reason we can't run openssh on our 150+ unix boxes. I have attached a patch below, which adds the -u option to delete the source file after copying, provided there were no errors. I would appreciate any feedback on this patch, with an aim to seeing it included in future releases. Adam *** scp.c 2006-01-31 22:11:38.000000000 +1100 --- scp.c.new 2006-05-14 18:11:14.000000000 +1000 *************** *** 99,104 **** --- 99,107 ---- /* This is set to zero if the progressmeter is not desired. */ int showprogress = 1; + /* Delete the source after copying. */ + int delete_source = 0; + /* This is the program to execute for the secured connection. ("ssh" or -S) */ char *ssh_program = _PATH_SSH_PROGRAM; *************** *** 278,284 **** addargs(&args, "-oClearAllForwardings yes"); fflag = tflag = 0; ! while ((ch = getopt(argc, argv, "dfl:prtvBCc:i:P:q1246S:o:F:")) != -1) switch (ch) { /* User-visible flags. */ case '1': --- 281,287 ---- addargs(&args, "-oClearAllForwardings yes"); fflag = tflag = 0; ! while ((ch = getopt(argc, argv, "dfl:prtuvBCc:i:P:q1246S:o:F:")) != -1) switch (ch) { /* User-visible flags. */ case '1': *************** *** 315,320 **** --- 318,326 ---- case 'S': ssh_program = xstrdup(optarg); break; + case 'u': + delete_source = 1; + break; case 'v': addargs(&args, "-v"); verbose_mode = 1; *************** *** 373,381 **** remin = remout = -1; do_cmd_pid = -1; /* Command to be executed on remote system using "ssh". */ ! (void) snprintf(cmd, sizeof cmd, "scp%s%s%s%s", verbose_mode ? " -v" : "", iamrecursive ? " -r" : "", pflag ? " -p" : "", targetshouldbedirectory ? " -d" : ""); (void) signal(SIGPIPE, lostconn); --- 379,388 ---- remin = remout = -1; do_cmd_pid = -1; /* Command to be executed on remote system using "ssh". */ ! (void) snprintf(cmd, sizeof cmd, "scp%s%s%s%s%s", verbose_mode ? " -v" : "", iamrecursive ? " -r" : "", pflag ? " -p" : "", + delete_source ? " -u" : "", targetshouldbedirectory ? " -d" : ""); (void) signal(SIGPIPE, lostconn); *************** *** 651,659 **** haderr = errno; fd = -1; } ! if (!haderr) (void) atomicio(vwrite, remout, "", 1); ! else run_err("%s: %s", name, strerror(haderr)); (void) response(); } --- 658,672 ---- haderr = errno; fd = -1; } ! if (!haderr) { ! if (delete_source) { ! if (verbose_mode) { ! fprintf(stderr, "Deleting source: %s\n", name); ! } ! unlink(name); ! } (void) atomicio(vwrite, remout, "", 1); ! } else run_err("%s: %s", name, strerror(haderr)); (void) response(); } *************** *** 1084,1090 **** usage(void) { (void) fprintf(stderr, ! "usage: scp [-1246BCpqrv] [-c cipher] [-F ssh_config] [-i identity_file]\n" " [-l limit] [-o ssh_option] [-P port] [-S program]\n" " [[user@]host1:]file1 [...] [[user@]host2:]file2\n"); exit(1); --- 1097,1103 ---- usage(void) { (void) fprintf(stderr, ! "usage: scp [-1246BCpqruv] [-c cipher] [-F ssh_config] [-i identity_file]\n" " [-l limit] [-o ssh_option] [-P port] [-S program]\n" " [[user@]host1:]file1 [...] [[user@]host2:]file2\n"); exit(1); *** scp.1 2006-01-20 11:31:47.000000000 +1100 --- scp.1.new 2006-05-14 18:59:35.000000000 +1000 *************** *** 20,26 **** .Sh SYNOPSIS .Nm scp .Bk -words ! .Op Fl 1246BCpqrv .Op Fl c Ar cipher .Op Fl F Ar ssh_config .Op Fl i Ar identity_file --- 20,26 ---- .Sh SYNOPSIS .Nm scp .Bk -words ! .Op Fl 1246BCpqruv .Op Fl c Ar cipher .Op Fl F Ar ssh_config .Op Fl i Ar identity_file *************** *** 188,193 **** --- 188,195 ---- The program must understand .Xr ssh 1 options. + .It Fl u + Deletes the source file after copying. .It Fl v Verbose mode. Causes _______________________________________________ openssh-unix-dev mailing list openssh-unix-dev@mindrot.org http://www.mindrot.org/mailman/listi...enssh-unix-dev |