提交 b5e472e7 编写于 作者: J Joerg Jaspert

Removed ssh-move

上级 a74ba427
#! /usr/bin/perl -w
use strict;
use IPC::Open2;
$ENV{LANG} = "C";
# The protocol consists of repeated exchanges of the following:
#
# S: <filename>
# S: <each line of file, with dot-stuffing as in SMTP>
# S: .
# C: [writes file]
# C: <filename>
# S: [unlinks file]
my $server = 0;
my $verbose = 0;
my $nonint = 0;
my $sshidentity;
my $sshmovepath = 'ssh-move';
my $fromdir;
my $todir;
while (@ARGV) {
local $_ = shift @ARGV;
if (/^--server$/) {
$server = 1;
} elsif (/^--verbose$/) {
$verbose = 1;
} elsif (/^--ssh-identity$/) {
$sshidentity = shift @ARGV;
} elsif (/^--ssh-move-path$/) {
$sshmovepath = shift @ARGV;
} elsif (/^--from-directory$/) {
$fromdir = shift @ARGV;
} elsif (/^--to-directory$/) {
$todir = shift @ARGV;
} elsif (/^--non-interactive$/) {
$nonint = 1;
} else {
unshift @ARGV, $_;
last;
}
}
local $| = 1;
my ($in, $out) = (*STDIN, *STDOUT);
unless ($nonint) {
my $servername = shift @ARGV;
local (*READER, *WRITER);
my @args = ('ssh');
push @args, '-i', $sshidentity if defined $sshidentity;
push @args, $servername, $sshmovepath;
push @args, '--server' unless ($server);
push @args, '--to-directory', $todir if (defined $todir && $server);
push @args, '--from-directory', $fromdir if (defined $fromdir && !$server);
push @args, '--non-interactive';
push @args, map quotemeta, @ARGV unless ($server);
my $pid = open2 (\*READER, \*WRITER, @args);
($in, $out) = (*READER, *WRITER);
}
sub server ()
{
chdir $fromdir if defined $fromdir;
my @files = map glob, @ARGV;
for my $file (@files) {
print $out "$file\n" or die "can't print to client: $!";
open FILE, "< $file" or die "can't open $file: $!\n";
local $_;
while (<FILE>) {
chomp;
$_ = ".$_" if /^\./;
print $out "$_\n" or die "can't print to client: $!";
}
print $out ".\n" or die "can't print to client: $!";
my $confirm = <$in>;
chomp $confirm if defined $confirm;
unlink $file if defined $confirm and $confirm eq $file;
}
}
sub client ()
{
chdir $todir if defined $todir;
my $file;
while (defined ($file = <$in>)) {
chomp $file;
print STDERR $file if $verbose;
(my $tmpfile = $file) =~ s[.*/][];
$tmpfile .= ".$$.tmp";
# TODO: unlink $tmpfile if things go wrong
open TMP, "> $tmpfile" or die "can't open $tmpfile: $!";
local $_;
while (<$in>) {
chomp;
if ($_ eq '.') {
close TMP or die "can't close $tmpfile: $!";
rename $tmpfile, $file
or die "can't rename $tmpfile to $file: $!";
print $out "$file\n" or die "can't print to server: $!";
last;
} else {
s/^\.//;
print TMP "$_\n" or die "can't print to $tmpfile: $!";
}
}
print STDERR " ok\n" if $verbose;
}
}
if ($server) {
server ();
} else {
client ();
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册