for Schleife cp abarbeiten

Dieses Thema im Forum "Shell-Skripte" wurde erstellt von loptr, 18.11.2009.

  1. #1 loptr, 18.11.2009
    Zuletzt bearbeitet: 18.11.2009
    loptr

    loptr Grünschnabel

    Dabei seit:
    18.11.2009
    Beiträge:
    6
    Zustimmungen:
    0
    Heydiho!

    Ich schau schon die ganze Zeit im Board, aber wirklich ne Lösung für mein Problemchen hab ich nicht gefunden (wenn auch ne Menge Lösungsansätze :D )

    ALSO:

    Ich kopiere von nem Server eine (zip) Datei mit massig verzeichnissen und Bildern rüber, vergleiche neue Dateien in der Datenbank und lasse mir eine txt Datei erstellen. Soweit alles jut.
    Jetzt will ich auf meinem Rechner nicht immer alle Dateien neu "beabeiten" lassen, sondern nur die, welche in der Datenbankdatei stehen (newimages.txt).
    Da die Bilder in einer Ordnerstruktur liegen kopiere ich (bisher) alle Bilder also mit

    Code:
    find simages/ -name "*.jpg" -exec cp {} images/ \;
    
    nun wollt ich das ganze in eine schleife packen und nur die bilder in der datei kopieren:

    Code:
    for line in $(cat newimages.txt)
    do
    find simages/ -name $line -exec cp {} images/ \;
    echo "$line"
    done
    
    jetzt passiert folgendes: das echo gibt mir alle bildnamen auf den screen, aber kopieren findet nur mit der letzten bilddatei in der newimages.txt statt. alle anderen werden nicht kopiert.

    hat jemand nen lösungsansatz für mich?
     
  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. #3 loptr, 18.11.2009
    Zuletzt bearbeitet: 18.11.2009
    loptr

    loptr Grünschnabel

    Dabei seit:
    18.11.2009
    Beiträge:
    6
    Zustimmungen:
    0
    WA? 1000 Dank ... zeilenweise lesen ist natürlich auch mal ne Idee...
    hab bis jetzt immer nach cp find usw. gesucht. :D manchmal gehts auch leicht ;-)
    .
    .
    .
    EDIT (autom. Beitragszusammenführung) :
    .

    So, jetzt häng ich ne Stunde dran und habe immer wieder das selbe gefunden - while und for alles ausprobiert. but the problem is the same ^^
     
  4. #4 bytepool, 18.11.2009
    bytepool

    bytepool Code Monkey

    Dabei seit:
    12.07.2003
    Beiträge:
    791
    Zustimmungen:
    0
    Ort:
    /home/sweden/göteborg
    Hi,

    am besten solltest du auch mal einen Auszug der Datei zeigen, und wie denn die Ordner Struktur aussieht, denn ich sehe z.B. den Sinn von find nicht.

    Nebenbei waere es gut wenn du Code-Tags fuer Quellcode benutzen wuerdest, das macht deine Posts deutlich lesbarer.

    mfg,
    bytepool
     
  5. loptr

    loptr Grünschnabel

    Dabei seit:
    18.11.2009
    Beiträge:
    6
    Zustimmungen:
    0
    HA! Da gibts ja sogar nen Code Tag :brav:

    Also .. das ist der Code der Datei (die wichtigen Sachen, davor ist nur wget & unzip):

    Code:
    for line in $(cat newimages.txt)
    do
    find simages/ -name $line -exec cp {} images/ \;
    echo "$line"
    done
    
    die Datei sieht so aus (ich schreibs auch mal in Code, weil besser lesbar):

    Code:
    0001234.jpg
    0012345.jpg
    0123456.jpg
    
    Ordnerstruktur ist so:

    /simages/00/0001/01234.jpg
    /simages/00/0010/0012345.jpg
    /simages/01/0123/0123456.jpg

    des weiteren existieren noch andere Ordner/Dateien wie:
    /simages/10/1011/1011234.jpg
    oder
    /simages/61/6145/6145789.jpg

    (sind ca. 5.000 Dateien - nur so als Richtwert)

    Ich habe auch schon versucht, mal das unzip der Datei simages.zip auf eine Dateiebene zu bringen (also dass alles *.jpg Dateien in /simages drin liegen), aber dazu auch nix gefunden. dann wäre das find überflüssig und ich benötigte nur das cp (quält den PC dann auch nicht so) :-)
     
  6. #6 bytepool, 18.11.2009
    bytepool

    bytepool Code Monkey

    Dabei seit:
    12.07.2003
    Beiträge:
    791
    Zustimmungen:
    0
    Ort:
    /home/sweden/göteborg
    Hi,

    ich muss gestehen dass ich so auf Anhieb auch nicht sehe was das Problem ist. Ich wuerde das ganze etwa so schreiben:

    Code:
    while read line; do
      find ./simages/ -name "$line" -exec echo {} images/ '+'
    done < newimages.txt
    
    Wenn das die erwuenschte Ausgabe ergibt, echo einfach durch cp ersetzen. Eventuell solltest du versuchen absolute Pfadnamen zu benutzen.

    'man unzip' sagt dass 'unzip -j' die Ordnerstruktur eigentlich ignorieren sollte, und alles im selben Ordner auspackt.

    mfg,
    bytepool
     
  7. loptr

    loptr Grünschnabel

    Dabei seit:
    18.11.2009
    Beiträge:
    6
    Zustimmungen:
    0
    HA! Das unzip hat funktioniert. jetzt hab ich im Stammverzeichnis nen haufen dateien drin. komischerweise hab ich das auch schon probiert (--help), aber resultat war = 0

    Ich werd jetzt mal das find weglassen und nur cp benutzen. vllt funzt das.

    die while schleife hatte ich auch schon ausprobiert, funktionierte nix (was wirklich an absoluten pfaden hängen kann, denn das hatte ich nirgends, weil die for ja gefunzt hat).

    Danke erstmal. ich meld mich wieder (mit lösung zur vollständigkeit oder frage :D )
     
  8. Anzeige

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

    loptr Grünschnabel

    Dabei seit:
    18.11.2009
    Beiträge:
    6
    Zustimmungen:
    0
    OHA! Da isser wieder.
    Also ein kleines Update mit Bitte um (erneute) :hilfe2:

    Mein Scrips sieht mittlerweile so aus, dass ich alle find und cp entfernt habe.
    Also entzippe direkt die Dateien.

    Jetzt funktioniert der (statische) Code ganz fantastisch:
    Code:
    #unzip -j ./content.zip simages/062/06213/0621352.jpg -d ./images/
    #unzip -j ./content.zip simages/062/06213/0621356.jpg -d ./images/
    #unzip -j ./content.zip simages/062/06213/0621351.jpg -d ./images/
    #unzip -j ./content.zip simages/061/06143/0614334.jpg -d ./images/
    #unzip -j ./content.zip simages/061/06143/0614317.jpg -d ./images/
    #unzip -j ./content.zip simages/061/06143/0614329.jpg -d ./images/
    
    Allerdings - sobald ich das in eine Schleife (while und for) reinpacke entpackt er die letzte Datei, allerdings keine vorher.
    Code:
    for line in $(cat newimages.txt)
    do
    strf=simages/`expr substr $line 1 3`/`expr substr $line 1 5`/$line
    unzip -j ./content.zip $strf -d ./images/
    done
    
    Datei sieht noch so aus wie vorher, ob Dateien im Archiv sind habe ich gecheckt (alle vorhanden).
    Habe schon probiert:
    - absolute Pfade
    - IFS
    - cat $file | while read line
    - while -> done $file

    Absolut mit nix hat es funktioniert :(
     
  10. loptr

    loptr Grünschnabel

    Dabei seit:
    18.11.2009
    Beiträge:
    6
    Zustimmungen:
    0
    Problem gelöst

    Es waren noch Windows Zeilenumbrüche in der newimages.txt Datei.

    entfernen mit

    dos2unix -a newimages.txt

    und schon läuft die Sache.

    Danke trotzdem @bytepool
     
Thema: for Schleife cp abarbeiten
Besucher kamen mit folgenden Suchen
  1. while schleife Ordner nacheinander abarbeitenlinux

Die Seite wird geladen...

for Schleife cp abarbeiten - Ähnliche Themen

  1. 2 Listen in einer for Schleife abarbeiten

    2 Listen in einer for Schleife abarbeiten: Hallo zusammen, Betriebssystem ist Suse Linux mit SH-Shell. Ich möchte folgendes machen: VAR1="/pfad1/" VAR2="/pfad2/" VAR3="${VAR1}1...
  2. for schleife für eine Zeile

    for schleife für eine Zeile: Hallo, ich bin neu hier in diesem Forum. Evtl. kann mir ja einer von euch bei meinem Problem helfen. Ich möchte für ein entpackprogramm eine...
  3. Systemd-Projekt veröffentlicht Event-Verarbeitungsschleife

    Systemd-Projekt veröffentlicht Event-Verarbeitungsschleife: Das Systemd-Projekt hat seine selbst entwickelte Event-Verarbeitungsschleife zum stabilen Teil von libsystemd erklärt. »sd-event« steht damit auch...
  4. continue in Schleife einbauen

    continue in Schleife einbauen: Hallo alle zusammen, ich schreibe grad an einem shell script und habe folgendes Problem: Ich möchte, dass die beiden if Anweisungen (zeile...
  5. [FRAGE] Dateinamen normalisieren während sie in einer "for" Schleife sind

    [FRAGE] Dateinamen normalisieren während sie in einer "for" Schleife sind: Moin Gemeinde, ich habe ein Skript welches Emails abholt und weiterverarbeitet, manche müssen ausgedruckt werden. Nun hat sich herausgestellt...