PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Shell File per FTP Senden Fehler



gulli
01-03-2006, 15:46
Hallo,

ich habe euch per google gefunden da ich jetzt schon 5 Stunden am rumprobieren bin und einfach keine Lösung für mein Problem finde und ich einfach nicht mehr weiter weiß.

Ich habe einen Server auf diesen werden täglich Dateien in ein Verzeichnis kopiert, die möchte ich nun per Shell Script und in Verbindung mit einem Cron auf einen weiteren Server kopieren.

Als Grundstruktur von meinem Shell Script habe ich folgende Variante gewählt:



#!/bin/bash
cd /home/u/user08/public_html/otr
I=0

# Die 3 steht fuer hole alles der letzten 3 Tage, was ich noch nicht habe.
while [ $I -lt 3 ]
do

DATUM=`date --date "-$I day" '+%y.%m.%d'`

ncftpput -u user -p passwort ftphost /html/files /home/u/user08/public_html/otr/datei_${DATUM}_*.zip

I=`expr $I + 1`
done


Die Schleife habe ich eben zur Sicherheit eingebaut, falls mal aus unerklärlichen Gründen eine Datei nicht richtig verschoben werden sollte dann direkt am nächsten Tag die Datei mit rüber kopiert werden soll.
Die Datum Variable sollte eigentlich klar sein, dass "*" ist dafür da, mir alle Dateien mit der Datei_Datum_ Grundstruktur rüberzukopieren, da es mehrere Dateien dieser Art auf dem Server gibt, also zb

datei_${DATUM}_1.zip
datei_${DATUM}_irgendeintext.zip
datei_${DATUM}_hio890.zip

wenn ich den befehl per ncftp manuell ausführe dann geht alles wunderbar, bloß eben in dem Shell geht es nicht, folgende Fehlermeldung wird mir gebracht:



for reading: No such file or directory.g.de/public_html/otr/datei_06.03.01_*.zip
: could not open file.ining.de/public_html/otr/datei_06.03.01_*.zip
for reading: No such file or directory.g.de/public_html/otr/datei_06.02.28_*.zip
: could not open file.ining.de/public_html/otr/datei_06.02.28_*.zip
for reading: No such file or directory.g.de/public_html/otr/datei_06.02.27_*.zip
: could not open file.ining.de/public_html/otr/datei_06.02.27_*.zip


Kann mir jemand weiterhelfen und evlt. sagen woran der Fehler liegt und was ich verbessern muss dass alles klappt?

Dankeschön

P.S
Sorry, ist mein erster Post und direkt schon ein solches Problem ;)

Caveman
01-03-2006, 18:11
Ich denke der Stern ist das Problem.
Versuche doch mal die Dateien mit dem find-Befehl zu suchen und dann diese Ausgabe (weil sie keinen Stern mehr enthält) herzunehmen.

kleines Beispiel:


for file in `find . -name "datei_${DATUM}_*.zip"` ; do

quelle=${file}

# Bearbeitung der Datei

done

gulli
01-03-2006, 19:49
hm sorry ich kann damit nichts anfangen, ich bin auf dem bereich script programmierung absoluter anfänger :)

könntest du deinen beitrag evtl. ein bisschen ausführen so dass ich als anfänger auch damit was anfangen kann. danke :)

Caveman
01-03-2006, 20:36
#!/bin/bash
cd /home/u/user08/public_html/otr
I=0

# Die 3 steht fuer hole alles der letzten 3 Tage, was ich noch nicht habe.
while [ $I -lt 3 ]
do

DATUM=`date --date "-$I day" '+%y.%m.%d'`

for file in `find . -name "datei_${DATUM}_*.zip"` ;
do
DATEI=${file}

ncftpput -u user -p passwort ftphost /html/files /home/u/user08/public_html/otr/${DATEI}

done

I=`expr $I + 1`
done
Ich hoff mal, dass es so stimmt. Ich programmier selten mit der Bash - lieber mit Perl.

gulli
01-03-2006, 20:41
hm geht leider immer noch nicht :(

jetzt habe ich folgende Fehlermeldung:

: bad interpreter: No such file or directory


@ caveman
kann man sowas auch per perl lösen?

Caveman
01-03-2006, 20:49
Die Bash reicht hier voll und ganz aus.
ersetze mal die Zeile mit dem ncftpput mit einer Ausgabe der Variable DATEI:
echo $DATEI;
Erscheinen dabei die erwarteten Dateien?

gulli
01-03-2006, 20:55
Nein, es erscheint wie vorhin folgende Fehlermeldung:

: bad interpreter: No such file or directory

Caveman
01-03-2006, 20:59
Im find-Befehl ist noch ein Fehler (der Punkt (aktuelles Verzeichnis) ist falsch)
ersetze ihn mal so:


find /home/u/user08/public_html/otr/ -name "datei_${DATUM}_*.zip"

Edit: Ich befuerchte, dass das auch nichts aendert
Edit2: Versuch mal den find-Befehl ausserhalb des Skripts

gulli
01-03-2006, 21:04
hm nein geht leider immer noch nicht, kommt immer noch die selbe fehlermeldung:

: bad interpreter: No such file or directory

so schaut jetzt die aktuelle sh file aus:



#!/bin/bash
cd /home/u/user08/public_html/otr
I=0

# Die 3 steht fuer hole alles der letzten 3 Tage, was ich noch nicht habe.
while [ $I -lt 3 ]
do

DATUM=`date --date "-$I day" '+%y.%m.%d'`


find /home/u/user08/public_html/otr/ -name "datei_${DATUM}_*.zip"

do
DATEI=${file}

echo $DATEI;

done

I=`expr $I + 1`
done

Caveman
01-03-2006, 21:12
Das "for file in ..." muss drin bleiben:
Die Zeile lautet also:

for file in `find /home/u/user08/public_html/otr/ -name "datei_${DATUM}_*.zip"` ;


Probier mal, ob Du so ausserhalb vom Skript eine Ausgabe bekommst:

find /home/u/user08/public_html/otr/ -name "datei_*.zip"

gulli
01-03-2006, 21:18
Ja ich bekomme ne ausgabe, also die Files werden mir da angezeigt...

dass for file habe ich wieder eingebaut, aber er bringt mir jetzt immer noch die selbe fehlermeldung

: bad interpreter: No such file or directory

so schaut dass script jetzt aus:



#!/bin/bash
cd /home/u/user08/public_html/otr
I=0

# Die 3 steht fuer hole alles der letzten 3 Tage, was ich noch nicht habe.
while [ $I -lt 3 ]
do

DATUM=`date --date "-$I day" '+%y.%m.%d'`


for file in `find /home/u/user08/public_html/otr/ -name "datei_${DATUM}_*.zip"` ;

do
DATEI=${file}

echo $DATEI;

done

I=`expr $I + 1`
done

Caveman
01-03-2006, 21:31
Bringt dieses Skript eine vernuenftige Anzeige?


#!/bin/bash
I=0

DATUM=`date --date "-$I day" '+%y.%m.%d'`
echo $DATUM

echo `find /home/u/user08/public_html/otr/ -name "datei_${DATUM}_*.zip"`

gulli
01-03-2006, 21:36
Nein leider auch nicht, immer noch selbe Fehlermeldung, hm komisch warum dies auch nicht funktioniert :(

ist es evtl. nicht einfacher ein Script zu schreiben, was einfach alle Files aus einem Ordner auf den anderen FTP-Server schiebt und schaut ob die selbe File dort schon vorhanden ist oder nicht, wenn ja dann passiert nichts ansonsten wird die file überschrieben? Geht sowas, ist sowas vielleicht einfacher? Könntest du sowas machen? Ich würde dir auch ne kleine Dankesspende per Paypal zukommen lassen ;)

Caveman
01-03-2006, 21:50
So, jetzt hab ich's mal selbst ausprobiert:
In meinem Verzeichnis habe ich folgende Dateien:

~/tmp> ll /tmp/datei_*
-rw-r--r-- 1 michael users 0 2006-03-01 22:42 /tmp/datei_06.03.01_1.zip
-rw-r--r-- 1 michael users 0 2006-03-01 22:42 /tmp/datei_06.03.01_2.zip
-rw-r--r-- 1 michael users 0 2006-03-01 22:41 /tmp/datei_abc_1.zip

Mein Versuchsskript schaut so aus:

~/tmp> cat filefinden.sh
#!/bin/bash
I=0

DATUM=`date --date "-$I day" '+%y.%m.%d'`
echo $DATUM

echo `find /tmp -name "datei_${DATUM}_*.zip"`

und die Ausgabe so:

~/tmp> sudo ./filefinden.sh
06.03.01
/tmp/datei_06.03.01_1.zip /tmp/datei_06.03.01_2.zip

Bei mir geht es also.
Koennte der Fehler noch wo anders liegen?

gulli
01-03-2006, 22:01
hm also bei mir funktioniert die ausgabe überhaupt nicht, allerdings der such befehl sehr wohl... hm komisch

hast du ne idee woran dass liegen könnte?

oder könntest du mir evtl nen script schreiben was einfach alle Files aus einem Ordner auf den anderen FTP-Server schiebt und schaut ob die selbe File dort schon vorhanden ist oder nicht, wenn ja dann passiert nichts ansonsten wird die file überschrieben. könntest du sowas machen? wäre riesig nett, würde dies auch mit ner gegenleistung belohnen, geld per paypal oder sowas...

Caveman
01-03-2006, 22:17
Was heißt bei Dir der such Befehl funktioniert?
Welche Ausgaben bekommst Du?

Ich kann Dir mal ein paar Tipps geben:
Hier mal ein Link zu einer guten Beschreibung über die Shell-Programmierung:
http://www.netzmafia.de/skripten/unix/index.html
Im Kapitel 8.7.1 findest Du z.B. wie man feststellt, ob eine Datei vorhanden ist:
test -e file

So schwierig sollte das Problem nicht sein.
Einfach mal etwas rumprobieren ;)

gulli
01-03-2006, 22:21
also wenn ich eingebe:
find /home/u/user08/public_html/test -name "datei_06.03.01.zip"

dann bekomme ich eben die ausgabe:
/home/u/user08/public_html/test/datei_06.03.01.zip

aber wenn ich eben dass shell script ausführen möchte kommt eben immer die selbe fehlermeldung, warum auch immer, was ich sehr komisch finde

Caveman
01-03-2006, 22:32
Das versteh ich nicht.
Das muss doch gehen.

Und wie sieht's aus, wenn Du ein Skript erstellst und darin nur diesen einzigen Befehl hast:
find /home/u/user08/public_html/test -name "datei_06.03.01.zip"

gulli
01-03-2006, 22:38
#!/bin/bash

find /home/u/user08/public_html/test -name "datei_06.03.01.zip"


so schauts aus, dass kommt als fehlermeldung zurück:

root:/home/u/user08/public_html/test # ./shell4.sh

: bad interpreter: No such file or directory

Caveman
01-03-2006, 22:44
Kann es sein, das die Bash auf dieser Maschine gar nicht drauf ist?

mach mal:


ll /bin/bash
und
whereis bash

gulli
01-03-2006, 22:46
bei Befehl1:
-rwxr-xr-x 1 root root 485212 Mar 19 2005 /bin/bash

bei Befehl2:
bash: /bin/bash /etc/bash.bashrc /usr/share/man/man1/bash.1.gz

Woran kann ich dass nun sehen obs drauf ist oder nicht? und ggfs aktualisieren?

Caveman
01-03-2006, 22:51
passt schon.
Was bringt folgendes:

ll /home/u/user08/public_html/test/shell4.sh
Sind die Rechte richtig?

Was passiert bei:

root:/home/u/user08/public_html/test # sh shell4.sh

gulli
01-03-2006, 22:56
beim ersten passiert folgendes


-rwxrwxrwx 1 user828c www 78 Mar 1 23:36 /home/u/user08/public_html/test/shell4.sh

beim zweiten passiert folgendes:


sh shell4.sh
: command not found
/home/u/user08/public_html/test/datei_06.03.01.zip

Caveman
01-03-2006, 23:03
Also findet das Skript etwas - siehe Zeile 3.
Allerdings verstehe ich die 2.Zeile überhaupt nicht.
Welcher Befehl soll hier nicht gefunden werden?

gulli
01-03-2006, 23:10
verstehe ich eben auch nicht, es steht ja nur folgendes in der bash datei:



#!/bin/bash

find /home/u/user08/public_html/test -name "datei_06.03.01.zip"

Caveman
01-03-2006, 23:18
Und die Datei ist vorhanden.
Also macht folgendes eine korrekte Ausgabe:


ll /home/u/user08/public_html/test datei_06.03.01.zip


Ich versteh's nicht?
Warum sollte ein Befehl normal funktionieren und innerhalb eines Skripts gibt's einen Fehler?

Hast Du zu dem Verzeichnis die richtigen Zugriffsrechte?

gulli
01-03-2006, 23:20
ja ich führe alles unter root aus, also daran kann es nicht liegen...


hm ich nämlich auch nicht, sehr komisch, ich geh jetzt nochmal die ganze konfiguration durch

Caveman
01-03-2006, 23:34
Hast Du vielleicht etwas anderes als Bash eingestellt?
Was ich mir allerdings nicht vorstellen kann, weil die erste Zeile explizit darauf hinweist.
Entfern sie trotzdem mal. Dann hast Du also nur noch eine Zeile mit dem find-Befehl, der ja außerhalb des Skripts funktioniert.
Starte dann mit einem der folgenden:

sh skript
zsh skript
bash skript
csh skript
Hast Du denn überhaupt Linux, was ich hier mal so vermute, und welche Version?

gulli
01-03-2006, 23:52
Ja klar habe ich Linux, Suse 9.3

hm nein tut sich überhaupt gar nichts...

Caveman
02-03-2006, 00:20
Neuer Versuch:
Jetzt mit ls statt mit find.

Versuch es erst mal so:


#!/bin/bash

I=0

DATUM=`date --date "-$I day" '+%y.%m.%d'`
echo $DATUM

for FILE in `ls /home/u/user08/public_html/otr/datei_${DATUM}_*.zip`
do
DATEI=$FILE
echo $DATEI
done
Und wenn's klappt, so:


#!/bin/bash

I=0

# Die 3 steht fuer hole alles der letzten 3 Tage, was ich noch nicht habe.
while [ $I -lt 3 ]
do

DATUM=`date --date "-$I day" '+%y.%m.%d'`

for FILE in `ls /home/u/user08/public_html/otr/datei_${DATUM}_*.zip`
do
DATEI=$FILE
echo $DATEI # zur Kontrolle

ncftpput -u user -p passwort ftphost /html/files ${DATEI}
done

I=`expr $I + 1`
done

gulli
02-03-2006, 00:35
schaut schon mal besser aus :) aber trotzdem immer noch folgende fehlermeldung:



: command not found
: command not found
'hell4.sh: line 12: syntax error near unexpected token `do
'hell4.sh: line 12: ` do


was mich auch wundert ist dass hell4.sh da der datei name shell4.sh lautet

Caveman
02-03-2006, 00:45
Hat wenigstens die erste Variante funktioniert?

Das mit dem 's' hätte ich dann kappiert, wenn es ein 'ß' gewesen wäre.
Aber so, das s ist doch ein ganz normaler Buchstabe.
Sehr kurios.

ninguno
02-03-2006, 07:17
@gulli: sag mal mit welchem editor erstellst du deine script files? kann es sein dass du das unter windows machst? es schaut fast so aus als ob da unsichtbare steuerzeichen drin wären...