WCM Forum

WCM Forum (http://www.wcm.at/forum/index.php)
-   Linux, UNIX, Open Source (http://www.wcm.at/forum/forumdisplay.php?f=13)
-   -   Dateien mit scp verschieben/nicht kopieren (http://www.wcm.at/forum/showthread.php?t=122321)

justsmile 17.01.2004 15:46

Dateien mit scp verschieben/nicht kopieren
 
Hallo!

Bin auf der Suche nach einer Möglichkeit (Script, ähnliches)
Dateien von einem Server auf einen anderen mittel SCP zu VERSCHIEBEN (+ Unterverzeichnisse) und nicht zu kopieren (bzw. zu kopieren und nachher zu löschen!

Das Ganze sollte ca. so sein:

statt wie üblich
scp -r login@fremderserver.at:/* /home/download/

sollte es dann sein
scpmove -r login@fremderserver.at:/* /home/download/

Kann mir da wer helfen?
Vielen Dank!!

sagi 17.01.2004 17:34

naja...

erst kopieren und dann löschen... wo genau liegt da das Problem?

mfg

c.

crazygeek 18.01.2004 02:15

schreib dir einfach ein script, das scpmove heisst wo du zuerst kopierst, und dann löscht...

dann hast du genau den befehl den du willst ;)

justsmile 18.01.2004 11:46

Zitat:

schreib dir einfach ein script, das scpmove heisst wo du zuerst kopierst, und dann löscht...
dann hast du genau den befehl den du willst ;)
Wenn ich es schon hätte, würde ich es fix und fertig hier posten, und nicht danach fragen, ob das jemand schon geschrieben hat oder mir zumind. dabei helfen kann :rolleyes:

Sloter 18.01.2004 12:02

Ich würde zuerst ein Tar erstellen, dann kopieren, dann löschen

#!/bin/sh
tar -xf download.tar /pfad/zum/verzeichnis/*
scp download.tar user@ip.ip.ip.ip:/home/user/
rm -r /pfad/zum/verzeichnis/*


Du mußt nur mehr die Schlüsseln zwischen den Maschinen austauschen, das scp ohne Paßwortabfrage durchläuft.

Sloter

sagi 18.01.2004 14:24

@sloter:

da müsste noch

1) das tar file gelöscht werden

2) das tar file am remote host entpackt werden

mfg

c.

justsmile 18.01.2004 15:10

@sloter:

Geniale Idee! :cool:

Mein Traum-Szenario ist:

Start: scpmove
Verbindung: zu Remoteserver
Remote: Komprimieren der Dateien mit Unterverzeichnissen
Verbindung: übertragen der kompr. Datei
Lokal: Entpacken der Datei in Unterverzeichnisse
Remote: löschen der kompr. Datei / der Dateien

noch besser wäre: scpmove user@remote:/verzeichnis/* zielverzeichnis
und der rest geschieht vollautomatisch und mittels ssh-schlüssel!

Wundert mich, dass das noch niemand implementiert/programmiert hat :confused:

Sloter 18.01.2004 15:31

Zitat:

Original geschrieben von sagi
@sloter:

da müsste noch

1) das tar file gelöscht werden

2) das tar file am remote host entpackt werden

mfg

c.

Itupferlreiter :D

1, warum? wird überschrieben.........

2, auch wieder warum? entpackst am Tape auch die Sicherung gleich nach dem schreiben?

Aber bitte :)

#!/bin/sh
tar -cf download.tar /pfad/zum/localen/verzeichnis/*
# lesen http://www.linuxnetmag.com/de/issue8/m8rsync1.html#23
scp download.tar user@ip.ip.ip.ip:/home/user/
#lesen man rhosts
rsh ip.ip.ip.ip "rm -r /pfad/wo/alte/entpackte/liegen/*
rsh ip.ip.ip.ip "tar -xf /pfad/wo/kopie/download.tar"
rm /pfad/zum/localen/verzeichnis/download.tar

Schöner wärs mit rsnc :-)

Sloter

sagi 18.01.2004 16:55

Zitat:

1, warum? wird überschrieben.........

2, auch wieder warum? entpackst am Tape auch die Sicherung gleich nach dem schreiben?
Du gehst davon aus, dass es sich um ein Backup handelt. Das ist jedoch scheinbar nicht der Fall, da sonst die alten Daten nicht gelöscht werden würden.

zu 1.: nur, wenn man immer das gleiche Dir kopiert

zu 2.:
Du gehst davon aus, dass es sich um ein Backup handelt. Das ist jedoch scheinbar nicht der Fall, da sonst die alten Daten nicht gelöscht werden würden.

justsmile 18.01.2004 17:50

Nein, es soll KEINE Backup-Lösung sein!

mein Wunsch nur, dass alles gleich auf einmal geht!

sozusagen: einem Script werden Quelle und Ziel übergeben, alles wird per SSH kopiert und danach gelöscht!
automatisch und ohne langes einloggen!
eben weil SCP bekannterweise nicht z.B. -movefiles oder sowas hat, dass die Dateien nach erfolgreicher Übertragung auch gleich gelöscht werden!

und das Ganze funktioniert dann ohne rsync oder ähnliches mit jedem Server, der SSH/SCP unterstützt!

Ein Script deshalb, um das ganz dann z.B. jede Stunde einmal zu machen! und ohne grafische Oberfläche!

valo 18.01.2004 20:03

Zitat:

Original geschrieben von justsmile
@sloter:

Geniale Idee! :cool:

Mein Traum-Szenario ist:

Start: scpmove
Verbindung: zu Remoteserver
Remote: Komprimieren der Dateien mit Unterverzeichnissen
Verbindung: übertragen der kompr. Datei
Lokal: Entpacken der Datei in Unterverzeichnisse
Remote: löschen der kompr. Datei / der Dateien

noch besser wäre: scpmove user@remote:/verzeichnis/* zielverzeichnis
und der rest geschieht vollautomatisch und mittels ssh-schlüssel!

Wundert mich, dass das noch niemand implementiert/programmiert hat :confused:

weils mich grad interessiert hat, hab ich ein bissl gebastelt:D

was hältst du davon?

aufruf ist:

./scpmove $USER $SERVER $REMOTE_DIR $LOCAL_DIR $TAR_FILENAME

REMOTE_DIR ist _OHNE_ "*" anzugeben, das macht das script!
Code:

#!/bin/sh
# v1, valo
# Username fuer die SSH/SCP Verbindung
USER=$1

# Servername von dem kopiert und geloescht werden soll
SERVER=$2

# Remote Verzeichnis, dessen Inhalt getart/kopiert und geloescht gehoert.
# Der Pfad ist OHNE einem * anzugeben!
#RDIR=$HOME/remote
RDIR=$3

# Lokales Verzeichnis in welches der Inhalt des tar-files entpackt wird.
#LDIR=$HOME/test
LDIR=$4

# Dateiname des tar-files
#TARFILE=test.tar
TARFILE=$5

# tar Aufruf am Server
TCMD="tar -cf $TARFILE $RDIR/* 2>1 >/dev/null"

# Kommando um die Dateien am Server zu leoschen
DELCMD="rm -r $TARFILE $RDIR/*"

# SSH Keys fuer die Verbindung sind unbedingt empfehlenswert, da ansonsten
# 3x das Passowrt eingeben werden muss.

# Dieses Script erstellt aus dem Verzeichnis $RDIR am Server $SERVER ein
# tar-file mit dem Namen $TARFILE. Als Benutzername fuer die SSH/SCP
# Verbindungen wird $USER verwendet.
# Anschliessend wird $TARFILE zum lokalen Computer mittels SCP kopiert
# und die Dateien aus $RDIR sowie die Datei $TARFILE auf $SERVER geloescht.
# $TARFILE wird lokal in das Verzeichnis $LDIR entpackt und anschliessend
# geloescht.


echo connect make tar
ssh -2 -l $USER $SERVER $TCMD
echo download tar
scp -q -2 $USER\@$SERVER:$TARFILE $LDIR/$TARFILE
echo remove remote files
ssh -2 -l $USER $SERVER $DELCMD
echo extract local tar
cd $LDIR
tar -xf $TARFILE
echo remove local tar
rm -f $LDIR/$TARFILE
exit 0

ich werd das noch ein bissl verfeinern, aber es funktioniert bei mir auf alle fälle...

Sloter 18.01.2004 20:03

Zitat:

Original geschrieben von justsmile

und das Ganze funktioniert dann ohne rsync oder ähnliches mit jedem Server, der SSH/SCP unterstützt!


:ja:

Sloter

valo 18.01.2004 20:31

noch ein kleines update, damit das script nicht mit falschen daten arbeitet, wenn man eine der angaben vergessen hat:

und wenn man jetzt noch die "echo ..." im if-block herausnimmt, dann arbeitet das script ganz leise, ausser es passiert ein fehler.

Code:

#!/bin/sh
# v1.1, valo
# Username fuer die SSH/SCP Verbindung
#USER=valo
USER=$1

# Servername von dem kopiert und geloescht werden soll
#SERVER=shangrila.lan.valo.at
SERVER=$2

# Remote Verzeichnis, dessen Inhalt getart/kopiert und geloescht gehoert.
# Der Pfad ist OHNE einem * anzugeben!
#RDIR=$HOME/remote
RDIR=$3

# Lokales Verzeichnis in welches der Inhalt des tar-files entpackt wird.
#LDIR=$HOME/test
LDIR=$4

# Dateiname des tar-files
#TARFILE=test.tar
TARFILE=$5

# tar Aufruf am Server
TCMD="tar -cf $TARFILE $RDIR/* 2>1 >/dev/null"

# Kommando um die Dateien am Server zu leoschen
DELCMD="rm -r $TARFILE $RDIR/*"

# SSH Keys fuer die Verbindung sind unbedingt empfehlenswert, da ansonsten
# 3x das Passowrt eingeben werden muss. SSHv2 wird als Protokoll erzwungen.

# Dieses Script erstellt aus dem Verzeichnis $RDIR am Server $SERVER ein
# tar-file mit dem Namen $TARFILE. Als Benutzername fuer die SSH/SCP
# Verbindungen wird $USER verwendet.
# Anschliessend wird $TARFILE zum lokalen Computer mittels SCP kopiert
# und die Dateien aus $RDIR sowie die Datei $TARFILE auf $SERVER geloescht.
# $TARFILE wird lokal in das Verzeichnis $LDIR entpackt und anschliessend
# geloescht.

if [ $USER -a $SERVER -a $RDIR -a $LDIR -a $TARFILE ]
    then
        echo connect make tar
        ssh -2 -l $USER $SERVER $TCMD
        echo download tar
        scp -q -2 $USER\@$SERVER:$TARFILE $LDIR/$TARFILE
        echo remove remote files
        ssh -2 -l $USER $SERVER $DELCMD
        echo extract local tar
        cd $LDIR
        tar -xf $TARFILE
        echo remove local tar
        rm -f $LDIR/$TARFILE
    else
        echo Eine oder mehrere Argumente nicht angegeben
fi
exit 0


justsmile 19.01.2004 00:52

@valo

Genial! :D :) :D :) :lol: :) :D :) :D


So hab ich mir das vorgestellt!! :D

Mein Problem ist, dass ich ein bissi programmieren kann, aber eben nicht gut genug :rolleyes:

Dein Script funktioniert schon mal vom Hinsehen :D
Danke für Deine Mühe!
Ich werde es in Kürze testen!

Long life :tux:

valo 19.01.2004 12:02

Zitat:

Original geschrieben von justsmile
@valo

Genial! :D :) :D :) :lol: :) :D :) :D


So hab ich mir das vorgestellt!! :D

:) :)

freut mich, dass es gut funktioniert. es gibt sicher noch einige sachen die man verbessern könnte... zb automatische erkennung ob von einem server kopiert werden soll, oder von lokal nach server... :D

citizen428 02.02.2004 12:51

Das Topic ist zwar schon älter, tauchte aber grade heute auch in der Newsgroup de.comp.os.unix.shell auf. Es wurden 2 interessante Antworten präsentiert:

Von Marcel Meckel:
Code:

Robert K. schrieb:

> gibt es eine Möglichkeit ein VZ per tar zu packen und ohne temporäre
> Datei gleich per scp oder ssh auf einen entfernten Rechner abzulegen
                                                                                                                                               
tar cvf - dir/ | buffer | ssh -c blowfish ssh user@host "cd /path/to/dest/
&&  buffer | tar xvf -"

Von Jürgen P. Meier:
Code:

mknod /tmp/fifo p
tar cjf /tmp/fifo XXX & scp /tmp/fifo us@rech:ziel.tbz
                                                                                                                                               
oder:
tar cjf - xxx | ssh -e none us@rech cat '>ziel.tbz'
                                                                                                                                               
(Viele tar Inkarnationen verwenden /dev/rmt oder $TAPE als default
wenn nicht per -f <archive> explizit angegeben)



Alle Zeitangaben in WEZ +2. Es ist jetzt 12:36 Uhr.

Powered by vBulletin® Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
© 2009 FSL Verlag