Page 1 of 1

bash schleife verschachteln

Posted: 2008-06-23 17:43
by schnuffel
Hi,

irgendwie raff ich es grad net

Code: Select all

for i in `grep "???" /root/knvdir`; do
for j in `grep "NEU" /root/knvdir_new`; do
echo $i $j
done
done
gibt mir folgendes aus

Code: Select all

???v07 NEUv07
???v07 NEUv08
???v08 NEUv07
???v08 NEUv08

ich hätte aber

Code: Select all

???v07 NEUv07
???v08 NEUv08
erwartet.
Leider sehe ich grad meinen Fehler nicht?!

das steht in den dateien
knvdir

Code: Select all

???v07
???v08
knvdir_new

Code: Select all

NEUv07
NEUv08
Any Ideas

Danke euch, Bernd

Re: bash schleife verschachteln

Posted: 2008-06-23 19:40
by Roger Wilco
Was willst du denn erreichen? So wie dein Code jetzt ist, ist die Ausgabe jedenfalls korrekt (2 Matches in der 1. Datei, 2 Matches in der 2. Datei, 2*2 => 4 mal Ausgabe).

Re: bash schleife verschachteln

Posted: 2008-06-24 09:38
by schnuffel
Sorry
ich will erreichen das mir als variable i der alte name und als j der neue Name gegeben wird den ich dann an ein FTP Script übergebe welches mir auf einem Remot FTP Dateien umbenennt.

Ich muß die Dateien auf dem Remote FTP Server die mit ??? beginnen remote auf dem Server nach NEU* umbenennen, erst dann darf ich diese zu mir holen damit diese verarbeitet werden können.

Das ganze sie derzeit so aus.

Code: Select all

#Fragezeichen Dateien auslesen
/root/ftp_auslesen.sh > /root/dir

#Fragezeichen Dateien umbenennen
sed -e 's/???/KNV/g' /root/dir|grep KNV > /root/dir_new
for i in `grep "???" /root/dir`; do
for j in `grep "KNV" /root/dir_new`; do
/root/rename.sh $i $j
done
done

#Umbenannte Dateien holen
cd $ZIEL
/root/get.sh

#Temp KNV dir loeschen
rm /root/dir
rm /root/dir_new
/root/ftp_auslesen.sh

Code: Select all

#!/bin/sh
ftp ftp.xxx.de <<EOF
cd /doc/Test
nlist
EOF
/root/rename.sh

Code: Select all

#!/bin/sh
ftp ftp.xxx.de <<EOF
cd /doc/Test
rename $1 $2
EOF
/root/get.sh

Code: Select all

#!/bin/sh

ftp ftp.xxx.de <<EOF
cd /doc/Test
mget NEU*
a
mdelete NEU*
a
EOF
Gruß Bernd

Re: bash schleife verschachteln

Posted: 2008-06-24 11:00
by Joe User
Alle Scripte in einem zusammengefasst:

Code: Select all

#!/bin/bash

ZIEL=""
FTPSERVER="ftp.domain.tld"

function ftp_rename() {
ftp ${FTPSERVER} <<EOF
cd /doc/Test
rename "${1}" "${2}"
EOF
}

function ftp_nlist() {
ftp ${FTPSERVER} <<EOF
cd /doc/Test
nlist
EOF
}

function ftp_get() {
ftp ${FTPSERVER} <<EOF
cd /doc/Test
mget NEU*
a
mdelete NEU*
a
EOF
}

for i in `ftp_nlist | grep "???"`; do
ftp_rename "${i}" "$(sed -e 's/???/KNV/g' -i "${i}")"
done
cd $ZIEL
ftp_get
HTH

PS: http://tldp.org/LDP/abs/html/

Re: bash schleife verschachteln

Posted: 2008-06-24 11:44
by schnuffel
Habs gerade mal getestet, klapp leider nicht

Code: Select all

sed: can't read ???v07: No such file or directory
Connected to ftp.xxx.de.
das gleiche dann für datei ???v08

das kommt bevor er sich connected hat (zumindest auf der Konsole)

Gruß Bernd

Re: bash schleife verschachteln

Posted: 2008-06-24 15:24
by Joe User
Sorry, das ' -i' im sed war zuviel:

Code: Select all

#!/bin/bash

ZIEL=""
FTPSERVER="ftp.domain.tld"

function ftp_rename() {
ftp ${FTPSERVER} <<EOF
cd /doc/Test
rename "${1}" "${2}"
EOF
}

function ftp_nlist() {
ftp ${FTPSERVER} <<EOF
cd /doc/Test
nlist
EOF
}

function ftp_get() {
ftp ${FTPSERVER} <<EOF
cd /doc/Test
mget NEU*
a
mdelete NEU*
a
EOF
}

for i in `ftp_nlist | grep "???"`; do
ftp_rename "${i}" "$(sed -e 's/???/KNV/g' "${i}")"
done
cd $ZIEL
ftp_get

Re: bash schleife verschachteln

Posted: 2008-06-24 15:42
by Joe User
Und hier nochmal ohne extra Subshell für sed:

Code: Select all

#!/bin/bash

ZIEL=""
FTPSERVER="ftp.domain.tld"

function ftp_rename() {
ftp ${FTPSERVER} <<EOF
cd /doc/Test
rename "${1}" "${2}"
EOF
}

function ftp_nlist() {
ftp ${FTPSERVER} <<EOF
cd /doc/Test
nlist
EOF
}

function ftp_get() {
ftp ${FTPSERVER} <<EOF
cd /doc/Test
mget NEU*
a
mdelete NEU*
a
EOF
}

for i in `ftp_nlist | grep "???"`; do
ftp_rename "${i}" "${i/???/KNV}"
done
cd $ZIEL
ftp_get
Bei Bedarf könnte man auch noch grep ersetzen und statt dem externen ftp das von bash bereitgestellte /dev/tcp nutzen ;)

Re: bash schleife verschachteln

Posted: 2008-06-24 16:07
by schnuffel
hmm leider klappt es nicht

gleiche Fehlermeldung wie vorher.

Anscheinend versucht der sed das lokal zu editieren.
Weil folgenden aufruf

Code: Select all

for i in `ftp_nlist | grep "???"`; do echo "$i" "$(sed -e 's/???/KNV/g' "${i}")"; done
bringt das

Code: Select all

sed: can't read ???v07: No such file or directory
???v07
sed: can't read ???v08: No such file or directory
???v08
selbst im Originalscript von dir passierts das der sed meckert bevor auf den FTP connected wurde.

Code: Select all

sed: can't read ???v07: No such file or directory
Connected to ftp.xxx.de.
daher meine ich das der sed anschlägt bevor er auf den FTP connected hat
Gruß Bernd

Re: bash schleife verschachteln

Posted: 2008-06-24 16:58
by Joe User
Nimm das Script ohne sed, das sollte funktionieren...

Re: bash schleife verschachteln

Posted: 2008-06-25 10:08
by schnuffel
Sorry, aber den sed brauch ich doch um das ??? mit KNV zu ersetzen oder?
ich habe es nun so gelöst, da sed nicht arbeitet wenn ich ihm eine Variable vorwerfe.

Code: Select all

for i in `ftp_nlist | grep "???"`; do
echo "$i" > /root/dir && ftp_rename "${i}" "$(sed -e 's/???/KNV/g' /root/dir)"
done
Gruß Bernd

Re: bash schleife verschachteln

Posted: 2008-06-25 10:55
by Joe User
schnuffel wrote:Sorry, aber den sed brauch ich doch um das ??? mit KNV zu ersetzen oder?
Nein, das kann bash selbst:

Code: Select all

"${i/???/KNV}"

Re: bash schleife verschachteln

Posted: 2008-07-03 21:48
by schnuffel
Danke, nun klappt alles.
Kann man das FTP irgendwie noch ergänzen das remote die Dateien erste gelöscht werden wenn Sie wirklich komplett runtergeladen wurden.

Ciao Bernd

Re: bash schleife verschachteln

Posted: 2008-07-04 10:24
by Joe User
Stichwort: md5sum

Re: bash schleife verschachteln

Posted: 2008-07-07 17:28
by schnuffel
Danke, aber ich verstehe da wohl was nicht. Wie soll ich mir denn von der Remote datei die Prüfsumme holen?
Das bekomme ich nicht hin

der Remote FTP kann nur.

Code: Select all

Commands may be abbreviated.  Commands are:

!               cd              edit            glob            ls              mode            open            proxy           remopts         sendport        tenex           xferbuf
$               cdup            epsv4           hash            macdef          modtime         page            put             rename          set             throttle        ?
account         chmod           exit            help            mdelete         more            passive         pwd             reset           site            trace
append          close           features        idle            mdir            mput            pdir            quit            restart         size            type
ascii           cr              fget            image           mget            msend           pls             quote           rhelp           sndbuf          umask
bell            debug           form            lcd             mkdir           newer           pmlsd           rate            rmdir           status          unset
binary          delete          ftp             less            mls             nlist           preserve        rcvbuf          rstatus         struct          usage
bye             dir             gate            lpage           mlsd            nmap            progress        recv            runique         sunique         user
case            disconnect      get             lpwd            mlst            ntrans          prompt          reget           send            system          verbose
Ciao Bernd

Re: bash schleife verschachteln

Posted: 2008-07-07 19:12
by Joe User
md5sum vor dem Upload und nach dem Download anwenden und die Resultate auswerten.

Re: bash schleife verschachteln

Posted: 2008-07-09 13:14
by schnuffel
Ja genau da liegt mein Problem, Die Dateien die ich per FTP hole lade ich nicht hoch. Die werden mir bereitgestellt.
Gruß Bernd

Re: bash schleife verschachteln

Posted: 2008-07-09 13:24
by Joe User
Ohne vertrauenswürdige Checksumme ist die von Dir gewünschte Datenintegrität nicht erfüllbar.

Re: bash schleife verschachteln

Posted: 2008-07-09 22:07
by chris76
Hi Markus,
wie macht das ncftpget denn, der hat doch eine Funktion dateien erst nach erfolgreichem Download auf der Gegenseite löscht wenn man -DD verwendet.

Re: bash schleife verschachteln

Posted: 2008-07-10 08:39
by Joe User
Dort wird lediglich die übertrage Anzahl Bits mit der Dateigrösse verglichen, was bekanntlich keine Rückchlüsse auf die Datenintegrität zulässt: Bits kippen hin und wieder auch mal um ;)

Re: bash schleife verschachteln

Posted: 2008-07-10 20:23
by chris76
ah ok, dann nützt ihm das ja auch nix