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)

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 20:46 Uhr.

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