Come creare un file in host remoto insieme con la creazione di directory usando ssh
-
01-10-2019 - |
Domanda
ho una voce / / / / file a b c nel mio ospite. Voglio creare un file su host remoto nel dire directory dest. Ora la domanda è, come faccio a creare un file in host remoto come / dest / a / b / c / d / file utilizzando script perl e con ssh. Qualsiasi idea di come faccio a creare le directory in script.?
Grazie.
Soluzione
Per riprodurre la struttura delle directory, l'uso catfile
e abs2rel
dalla File::Spec
modulo: catfile
unisce pezzi per fare un percorso, e abs2rel
dà il percorso relativo ad alcune directory di base.
Il File::Copy
copy
del modulo copierà ad una maniglia. bene questo si adatta con il modo sshopen3
apre maniglie per lo standard input, output e l'errore sul lato di destinazione.
Il comando remoto ha 3 parti:
-
mkdir -p $dst_dir
, crea tutte le directory che precedono il file nel percorso di destinazione -
cat >$dst_file
, collega la manigliaSEND
per il file di destinazione -
md5sum $dst_file
, mostra che i dati arrivati ??sani e salvi
Esempio di programma di seguito:
#! /usr/bin/perl
use warnings;
use strict;
use File::Basename;
use File::Copy;
use File::Spec::Functions qw/ abs2rel catfile /;
use Net::SSH qw/ sshopen3 /;
my $HOST = "user\@host.com";
my $SRC_BASE = "/tmp/host";
my $SRC_FILE = "$SRC_BASE/a/b/c/file";
my $DST_BASE = "/tmp/dest";
system("md5sum", $SRC_FILE) == 0 or exit 1;
my $dst_file = catfile $DST_BASE, abs2rel $SRC_FILE, $SRC_BASE;
my $dst_dir = dirname $dst_file;
sshopen3 $HOST, *SEND, *RECV, *ERRORS,
"mkdir -p $dst_dir && cat >$dst_file && md5sum $dst_file"
or die "$0: ssh: $!";
binmode SEND;
copy $SRC_FILE, \*SEND or die "$0: copy failed: $!";
close SEND or warn "$0: close: $!"; # later reads hang without this
undef $/;
my $errors = <ERRORS>;
warn $errors if $errors =~ /\S/;
close ERRORS or warn "$0: close: $!";
print <RECV>;
close RECV or warn "$0: close: $!";
esempio di esecuzione:
$ ./create-file 746308829575e17c3331bbcb00c0898b /tmp/host/a/b/c/file 746308829575e17c3331bbcb00c0898b /tmp/dest/a/b/c/file