• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

Patch-CD -> BASH -> Datum eines Files auf FTP ermittel

Hi zusammen!

Ich hab folgendes Problem! Ich würde gerne ein Bash-Script erstellen das mir unter anderem eine lokale Datei mit einer auf einem ftp liegender Datei anhand des Datums vergleicht.
Nur wenn die bedingung erfüllt ist das die auf dem ftp aktueller ist dann soll das Programm weiterlaufen.
mit dem date-Befehl geht das irgendwie nur mit lokal gespeicherten Dateien!

Hat da von euch jemand nen Vorschlag?
 

regexer

Advanced Hacker
PrinzEisenherz1 schrieb:
mit dem date-Befehl geht das irgendwie nur mit lokal gespeicherten Dateien!
Bei remote-Dateien funktioniert bei mir "dir".
Code:
Ftp> dir
200 PORT command successful
150 Opening ASCII mode data connection for file list
drwx---r-t   7 beispiel1 ftpusers     4096 Jan 10  2005 .
drwx---r-t   7 beispiel1 ftpusers     4096 Jan 10  2005 ..
drwxr-xr-x   2 beispiel1 ftpusers     4096 Apr  5  2007 mail
drwxr-xr-x   2 beispiel1 ftpusers     4096 Sep 30 22:38 pics
drwxr-xr-x   3 beispiel1 ftpusers     4096 Sep 14  2004 main
-rw----r--   1 beispiel1 ftpusers      554 Apr 18  2007 index.html
drwxr-xr-x   3 beispiel1 root        40960 Nov 17 07:46 logs
drwxr-xr-x   2 beispiel1 ftpusers     4096 Apr  5  2007 locked
226 Transfer complete
Ftp: 502 Bytes empfangen in 0.00Sekunden 502000.00KB/Sek.
 
erstmal danke für die Antworten!
Also mein Problem ist folgendes, ich möchte mit einem Script prüfen ob eine bestimmte Datei auf nem ftp-Server aktueller ist als die die lokal auf meinem Rechner ist! Wenn dann die Bedinnung erfüllt ist (Datei auf Server ist aktueller) dann soll in einer Schleifenfunktion das Script weiter abgearbeitet werden! Wenn nich erfüllt dann das Script beendet werden!

Wie kann ich das am besten umsetzen?

Mfg Johnny
 

abgdf

Guru
Ich persönlich würde sowas in Python machen (mit einer Kombination aus

http://www.angelfire.com/linux/tux25/python.html#7
http://www.angelfire.com/linux/tux25/python.html#5
http://www.angelfire.com/linux/tux25/python.html#8)

Vielleicht hast Du auch mit
Code:
find -anewer
oder so Glück.

Gruß
 
Oder wenn sowas wie ftpfs zur Hand liegt, wird das natürlich einfach
Code:
if [ file1 -nt file2 ]; then
...
fi;
 
Also ich hab mal mit curlftpfs den ftp local gemountet! Klappt echt klasse!
Wie kann ich das Verzeichnis dann wieder umounten?
Ich hab bei curlftpfs keine option gefunden!

Dein Vorschlag sieht aber sehr vielversprechend aus! :)
 
Ich muss wohl erstmal erklären was ich eigentlich vorhabe!
Als ich habe n paar Rechner da wo ich SUSE 10.3 installiert habe! Diese haben aber entweder überhaupt keinen Internetzugang oder nur einen recht langsamen!
Also kam ich auf die Idee ne Patch-CD zu erstellen. Klappt auch wunderbar.
Jetzt wollte ich das aber etwas automatisieren.
Das heisst, ich möchte eine Script schreiben das auf nem Rechner mit schnellem Internetzugang prüft ob im Homeverzeichnis bereits ein Verzeichnis "Patch-CD" vorhanden ist! Wenn nicht dann soll es erstellt werden und die updates in das Verzeichnis runtergeladen werden.

Besteht das Verzeichnis schon dann soll das Script prüfen ob auf dem ftp neuere updates vorliegen und dieses gegebenenfalls runterladen.

Wenn keine Updates vorliegen soll das Script mit einer Meldung beenden.

Sollten Updates vorliegen dann sollen sie runtergeladen werden und dann ein ISO erstellt werden. Desweiteren soll dann das Script fragen ob es das ISO auf CD/DVD brennen soll.

Ich hoffe ihr wisst was ich damit meine.

Hier mal mein Entwurf:
Code:
#!/bin/bash

DATUM=`date +"%d-%m-%Y"`

if ( test -d $HOME/Patch-CD );then
echo "Verzeichnis Patch-CD ist vorhanden. Es wird geprüft ob updates vorhanden sind...!"

rsync -rltuzv --stats --progress --delete --delete-excluded \
 	--include "kernel-default*.i586.rpm" \
 	--include "kernel-smp*.i586.rpm" \
 	--include "kernel-source*.i586.rpm" \
 	--include "kernel-syms*.i586.rpm" \
 	--include "kernel-um*.i586.rpm" \
 	--exclude "*.i586.rpm" \
 	--exclude "src/" \
 	--exclude "ppc/" \
 	--exclude "x86_64/" \
 	--exclude "*.x86_64.delta.rpm" \
 	ftp5.gwdg.de::pub/opensuse/update/10.3 $HOME/Patch-CD/i386/update/
echo "Patch-CD am $DATUM geupdatet" > $HOME/Patch-CD/Update-$DATUM.txt

	else

echo "Verzeichnis Patch-CD nicht vorhanden! Es wird erstellt!"

	mkdir -p $HOME/Patch-CD/i386/update

echo "Verzeichnis Patch-CD wurde erstellt"
echo "Verzeichnis Patch-CD wird mit updates befüllt....!"

rsync -rltuzv --stats --progress --delete --delete-excluded \
 	--include "kernel-default*.i586.rpm" \
 	--include "kernel-smp*.i586.rpm" \
 	--include "kernel-source*.i586.rpm" \
 	--include "kernel-syms*.i586.rpm" \
 	--include "kernel-um*.i586.rpm" \
 	--exclude "*.i586.rpm" \
 	--exclude "src/" \
 	--exclude "ppc/" \
 	--exclude "x86_64/" \
 	--exclude "*.x86_64.delta.rpm" \
 	ftp5.gwdg.de::pub/opensuse/update/10.3 $HOME/Patch-CD/i386/update/
echo "Patch-CD am $DATUM erstellt" > $HOME/Patch-CD/Erstellt-$DATUM.txt

fi
exit 0

Im Abschnitt wo geprüft wird ob updates vorliegen hab ich auch schon versucht die Ausgabe mit grep zu parsen um mir dann im Verzeichnis Patch-CD ein Text-File anzulegen wo steht das geupdatet wurde. Klappt aber irgendwie nicht.
Das heisst es soll festgestellt werden ob mindestens ein Paket runtergeladen wurde. Wenn dies der Fall ist dann soll er den wert in ne Variable schreiben.

Hatte es mal so versucht:

update=`grep "Number of files transferred:"`
und dann die Variable $update nach dem ftp eigefügt. Geht nicht :-(

Kann mir da von euch jemand weiterhelfen um das Script zu verwirklichen?

Wäre euch sehr dankbar

Johnny
 
Unmount mit `fusermount -u`, denke ich.
PrinzEisenherz1 schrieb:
Code:
if ( test -d $HOME/Patch-CD );then
:arrow:
Code:
if [ -d "$HOME/Patch-CD ]; then
rsync -rltuzv --stats --progress --delete --delete-excluded \
Nur so, wie wär's mit -HPSav? -z bringt eigentlich nix, weil .rpms schon komprimiert sind. --include wird auch nicht so funktionieren wie du dir das denkst.
Hier ist mal, was ich zum Syncen nehme:
Code:
RSYNC_FLAGS="-4HPSa --delete-after --delete-excluded"
echo "Downloading suse103-update";
rsync $RSYNC_FLAGS \
        rsync://ftp5.gwdg.de/pub/opensuse/update/10.3/ \
        "$REPO/suse103-update/" --filter=merge\ <(cat <<-EOF
                - *.delta.rpm
                - *.patch.rpm
                - *-debuginfo-*.rpm
                + /repodata/***
                + /rpm
                + /rpm/i586/***
                + /rpm/noarch/***
                + /rpm/x86_64/***
                - *
                EOF
        );
 
Also Dein Vorschlag klappt bei mir überhaupt nicht!

Beispiel:
Code:
#!/bin/bash

DATUM=`date +"%d-%m-%Y"`

mkdir -p $HOME/Patch-CD/i386/update

RSYNC_FLAGS="-4HPSa --delete-after --delete-excluded"
rsync $RSYNC_FLAGS \
        rsync://ftp5.gwdg.de/pub/opensuse/update/10.3/ \
        "$HOME/Patch-CD/i386/update/" --filter=merge\ <(cat <<-EOF
                - *.delta.rpm
                - *.patch.rpm
                - *-debuginfo-*.rpm
                + /repodata/***
                + /rpm
                + /rpm/i586/***
                + /rpm/noarch/***
                - *
                EOF
        );

Fehlermeldung:
Code:
Unknown filter rule: `                - *.delta.rpm'
rsync error: syntax or usage error (code 1) at exclude.c(765) [client=2.6.9]
 
Oben