Kopieren von Dateien per Shell

Dieses Thema im Forum "Shell-Skripte" wurde erstellt von Akki, 08.03.2010.

  1. Akki

    Akki Grünschnabel

    Dabei seit:
    08.03.2010
    Beiträge:
    4
    Zustimmungen:
    0
    Hallo Liebe Forumnutzer,

    vielleicht kann mir jemand helfen:

    Aufgabe:

    Ich möchte Bilder von unterschiedlichen IP Cams, die ihre Bilder via FTP
    an den Server senden aus einem Ordner per Skript alle 50 sekunden auf
    unterschiedliche Servereigene Ordner kopieren und aus dem sagen
    wir mal Anlieferungsordner herauslöschen.

    Die Bilddateien sind wie folgt aufgebaut: Gerätenummer_Name_Bildnummer.jpg
    z.B. 005542254_Waldcam_781.jpg.

    Zur Zeit gehe ich wie folgt vor

    Die Dateinamen werden mit einer Zuordnungsregel per ls -1 in einer Variablen ausgelesen.
    Ich nehme eine while do Schleife, die alle 40 Sekunden die Ursprungsbilder per cp
    kopiert und nach dem kopieren via mv löscht.

    Nun meine Probleme

    1. Es darf nur eine Bilddatei im Odner sein sonst spinnt cp - ich glaube hier muss dann ein Array ran.

    2. Werden beim kopieren, die Daten gerade von der Kamera hochgeladen
    sind die Bilder 0 Byte oder nur zu dem Anteil an Byte kopiert, wie diese
    gerade beim aufruf des Skiptes waren. - gibt es keine Möglichkeit zu überprüfen ob eine Datei vollständig ist

    Vielleicht hat ja jemand eine Idee, ich wäre bestimmt glücklich darüber.

    Mit freundlichen Grüßen

    Akki
     
  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. #2 marcellus, 08.03.2010
    marcellus

    marcellus Kaiser

    Dabei seit:
    09.05.2007
    Beiträge:
    1.392
    Zustimmungen:
    0
    Du machst das doch ziemlich umständlich.
    Das regelmäßige ausführen eines befehls läuft normal über einen cron job. Wenn du wissen willst, ob auf eine datei geschrieben wird schau dir lsof an. Wenn du dateien verschieben willst dann mach das gleich mit mv.
     
  4. Gast1

    Gast1 Guest

    Mal vom wahrscheinlichen Vertipper (-1 statt -l) abgesehen, bin ich mir ziemlich sicher, daß man diesen Konstrukt auch nicht braucht.

    Auslesen mittels ls ist zu > 99% unnötig und hat meist nur eine Funktion, es sorgt für Ärger.

    Entweder verwendet man ein for mit entsprechender Wildcard oder man löst es über find (mit anschließendem -exec).
     
  5. reni

    reni Guest

    Das ist bestimmt kein Vertipper, da er so die Filenamen und nur die Filenamen ausliest ;)


    Btw. zeig uns doch mal dein Script.
     
  6. Gast1

    Gast1 Guest

    Akzeptiert (nennt sich wohl Macht der Gewohnheit, wahrscheinlich waren es die vielen "fdisk -1" o.ä. aus diversen Forenbeiträgen, die einen entsprechenden "Reflex" ausgelöst haben).
    Unnötig wird dieser ls-Konstrukt aber mit an Sicherheit grenzender Wahrscheinlichkeit trotzdem sein

    ACK.
     
  7. Akki

    Akki Grünschnabel

    Dabei seit:
    08.03.2010
    Beiträge:
    4
    Zustimmungen:
    0
    Hallo Liebe Forumnutzer,

    danke erst einmal für die vielen Antworten aber ich muss eines noch
    hinzufügen. Ja es handelt sich bei ls mit dem Parameter -1 (minus eins),
    um nur die Darstellung des Dateinamens zu erhalten.

    Wie marcellus schrieb:Das regelmäßige ausführen eines befehls läuft normal über einen cron job
    Ist mir ja bekannt aber ein Cron job läuft nur pro Minute, aber ich kann
    marcellus beruhigen ich starte täglich das Script mit einem Cronjob.

    Ich habe mal hier das irre Script eingefügt:

    Code:
    1. #!/bin/sh
    2.
    3. while true
    4. do
    5.   if test -f 00*.jpg
    6.     then
    7.       ls -t -1 /srv/www/vhosts/ftpdomain.com/webcam-12831/00*.jpg |
    8.       while read filename;
    9.       do
    10.        cp "$filename" "/srv/www/vhosts/domain.de/httpdocs/media-cam/webcam-12831.jpg"
    11.        sleep 5
    12.        mv "$filename" /dev/null
    13.        mv 00*.jpg /dev/null
    14.        done
    15.    fi
    16.  sleep 40
    17.  done
    
    Ich habe das Script um einige Zeilen gekürzt um es übersichtlicher zu machen.
    Warum verwende ich cp statt mv -> damit der Zeitstempel übergeben wird.

    Das Script wird als root ausgeführt.

    Mit freundlichen Grüßen

    Akki
     
  8. reni

    reni Guest

    Mein Tipp:
    Alles mit einer for-Schleife realisieren, in der du `ls -1` als Parameter $i an den cp-Befehl übergibst.
    Code:
    for <var> in <liste>; do <befehle>; done
     
  9. Akki

    Akki Grünschnabel

    Dabei seit:
    08.03.2010
    Beiträge:
    4
    Zustimmungen:
    0
    Löst sich da dann auch das Problem mit den leeren Dateien oder muss ich
    unfertige mit einer lsof Regel ausschließen lassen.

    Mit freundlichen Grüßen

    Akki
     
  10. reni

    reni Guest

    Leere Dateien musst du zuvor noch prüfen z.B. mit
    Code:
    if [ $i -eq 0 ] then ... 
     
  11. Akki

    Akki Grünschnabel

    Dabei seit:
    08.03.2010
    Beiträge:
    4
    Zustimmungen:
    0
    Hallo reni,

    ich glaube es jetzt hinbekommen zu haben. Ich werde mal das Script
    jetzt erst einmal einige Tage laufen lassen.

    Sollte ich dennoch Probleme habe melde ich mich hier noch einmal melden.

    Vielen Dank.

    Mit freundlichen Grüßen

    Akki
     
  12. Gast1

    Gast1 Guest

    *öhm*

    Code:
    12.        mv "$filename" /dev/null
    13.        mv 00*.jpg /dev/null
    Könntest Du uns den Sinn dieses Konstruktes erklären?

    (Ich weiß ja nicht, wie es den anderen Lesern dieses Threads geht, aber IMHO würden 9 von 10 Kleingärtnern hier "rm" verwenden.)
     
  13. #12 marcellus, 08.03.2010
    marcellus

    marcellus Kaiser

    Dabei seit:
    09.05.2007
    Beiträge:
    1.392
    Zustimmungen:
    0
    Und 10 von 10 Kleingärtnern würden statt
    Code:
    cp a b; mv a /dev/null
    nicht
    Code:
    cp a b; rm a
    sondern
    Code:
    mv a b
    verwenden, denke ich
     
  14. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  15. reni

    reni Guest

    @marcellus
    mv behält aber nicht den Zeitstempel!
     
  16. #14 foxkilo, 16.03.2010
    foxkilo

    foxkilo Grünschnabel

    Dabei seit:
    05.05.2006
    Beiträge:
    1
    Zustimmungen:
    0
    ich wuerde nur "linken", maximal die uploads in eine changeroot packen und auch da linken.
     
Thema:

Kopieren von Dateien per Shell

Die Seite wird geladen...

Kopieren von Dateien per Shell - Ähnliche Themen

  1. Dateien von Linux & Unix auf eine Windowsfreigabe kopieren - wie geht das?

    Dateien von Linux & Unix auf eine Windowsfreigabe kopieren - wie geht das?: Hallo, wie kann ich mit einfachen Linuxmitteln Dateien auf eine Windowsfreigabe kopieren ohne irgendwelche Tools geschweige denn die grafische...
  2. Mehrere Textdateien in STDOUT kopieren

    Mehrere Textdateien in STDOUT kopieren: Hallo zusammen, ich suche eine Möglichkeit, wie ich alle Dateien aus einem Verzeichnis (Textdateien) In die STDOUT kopieren kann bzw....
  3. Kopieren von Dateien und oder Verzechnissen

    Kopieren von Dateien und oder Verzechnissen: Hallo, ich hab hier mal ein kleines Problem oder vielleicht seh ich auch den Wald vor lauter Bäumen nicht. Mein Bash Skript bekommt als...
  4. Mehrere Dateien kopieren und Zahl im Dateinamen beibehalten

    Mehrere Dateien kopieren und Zahl im Dateinamen beibehalten: Hey, angenommen, ich habe 3 Dateien: 04_DateiA, 04_DateiB, 04_DateiC und ich möchte die kopieren in: 05_DateiA, 05_DateiB, 05_DateiC , wie...
  5. Dateien von Serve A zu Server B kopieren

    Dateien von Serve A zu Server B kopieren: Hallo alle zusammen, ich will ca. 4 GB Daten von Server A zu Server B kopieren. Voraussetungen: - SSH-Zugriff zu beiden Servern - KEIN...