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
erwartet.
Leider sehe ich grad meinen Fehler nicht?!
das steht in den dateien
knvdir
knvdir_new
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:
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