Anzeige:
Ergebnis 1 bis 11 von 11

Thema: Files suchen & bearbeiten

  1. #1
    Registrierter Benutzer
    Registriert seit
    16.04.2002
    Ort
    München
    Beiträge
    10

    Talking Files suchen & bearbeiten

    Hallo,

    ich hab echt ein Problem mehrere Files zu bearbeiten.

    Also konkret - ich durchsuche zuerst ein Verzeichnis, ob Files mit einer gewissen Endung (z.B. text) im Verzeichnis existieren -- funktioniert wunderbar.

    und anschliessend muss ich mit jedem File, div. Oracle Procedures etc. durchführen.
    AWA das funktioniert net so richtig...kann mir jemand nen Tipp geben,
    wie ich die 2. Schleife machen muss (SORRY...für die Frage...)

    DANKE.
    petzi

  2. #2
    Registrierter Benutzer
    Registriert seit
    30.12.2001
    Beiträge
    444
    Was hast'n bis jetzt so?

  3. #3
    Registrierter Benutzer
    Registriert seit
    29.12.2001
    Ort
    Berlin
    Beiträge
    231
    Vielleicht so
    PHP-Code:
    for i in `ls /$dir/*.txt`;do
          <
    Behfehl$i
    done 
    tomes
    ************************************************
    Man(n oder Frau) muss nicht alles wissen,
    Man(n oder Frau) muss nur wissen wo es steht !
    ************************************************
    http://www.sandtom.net
    ICQ 176436259

  4. #4
    Registrierter Benutzer
    Registriert seit
    16.04.2002
    Ort
    München
    Beiträge
    10
    hi,

    danke.

    also bei mir siehts so aus...

    for i in 'ls a1 $dir | grep txt';
    do
    echo $i
    # und nun sollten für alle gefunden files sqlplus und div. andere funktionen aufgerufen werden. aber ich erhalte immer die Meldung

    --> unexpected end of file, am ende des files.

    done

    Danke für Eure Hilfe.
    petzi

  5. #5
    Registrierter Benutzer
    Registriert seit
    30.12.2001
    Beiträge
    444
    Hi Petzi,

    ein paar Sachen vorweg(Ich glaub' da wär auch mal'n Hinweis in der FAQ fällig)
    • Wenn du Code hier rein stellst nimm bitte die [ code ] Tags. Das erhöht die Lesbarkeit enorm(Ich seh' allerdings gerade das da gar nix zum Klicken da ist. Muss man per Hand schreiben. Siehe vb-Code Hilfe
    • Ich empfehle statt `...`lieber $( ... ) zu nehmen, ist zwar nicht kompatibel zur Ur-Bourne-Shell aber wesentlich weniger fehleranfällig
    • Nimm einen Editor mit Syntaxeinfärbung(SciTE,glimmer,kwrite,nedit,vim,.. .). Dann siehst Du einige Fehler sofort


    --> unexpected end of file, am ende des files.

    Das deutet auf einen Syntaxfehler hin, möglicherweise auch ein fehler aufgrund eines ungewhöhnlichen Dateinamens(Der Quotingzeichen wie ' oder ` oder " oder auch andere störende Metazeichen enthält.
    Weiterhin solltest Du um dem Vorzubeugen Variablennamen in Anführungszeichen setzen. "so" Sonst stören auch bereits enthaltene Leerzeichen und Tabs im Dateinamen.

    Shell Option -x
    Die Shell Option -x sorgt dafür das Befehle nach der Interpretation(Variablen, Unterkommandos, ... ) aber unmittelbar vor der Ausführung noch mal ausgegeben werden. Die Option wird mit set -x gesetzt und set +x wieder aufgehoben. Das set -x muss im Script stehen.

  6. #6
    Registrierter Benutzer Avatar von Hans-Georg Normann
    Registriert seit
    04.03.2000
    Ort
    Uetersen
    Beiträge
    571
    Zitat Zitat von petzi
    hi,

    danke.

    also bei mir siehts so aus...

    for i in 'ls a1 $dir | grep txt';
    do
    echo $i
    # und nun sollten für alle gefunden files sqlplus und div. andere funktionen aufgerufen werden. aber ich erhalte immer die Meldung

    --> unexpected end of file, am ende des files.

    done

    Danke für Eure Hilfe.
    Also ich würde ein Script schreiben, welches den Dateinamen als Parameter mitbekommt. Ich nenne das mal DEINSCRIPT.sh
    Code:
    #!/bin/sh
    DATEINAME = $1
    ..........
    und dann ganz einfach
    Code:
    find . -name "*.txt" -exec DEINSCRIPT.sh {} \;
    #alternative wenn >Gross- Kleinschreibung der Dateinamen ignoriert werden soll
    find . -iname "*.txt" -exec DEINSCRIPT.sh {} \;
    Beachte, dass das -exec in der Shell unbedingt mit \; abgeschlossen werden muss. {} gibt den Dateinamen aus.

    Hans
    333 Mhz, 466 MHz, neee, ich hab was neues zuhause.....

  7. #7
    Registrierter Benutzer
    Registriert seit
    16.04.2002
    Ort
    München
    Beiträge
    10
    Danke für die Tipps.

    es funzt eh schon - hab halt vergessen das ich die oracle sqlplus in
    `` setzen muss, damit's ausgeführt werden.

    THX.
    petzi

  8. #8
    Registrierter Benutzer
    Registriert seit
    05.09.2002
    Ort
    Neuhausen
    Beiträge
    320
    Verbesserungsvorschlag statt:
    Code:
    for i in 'ls a1 $dir | grep txt'
    Direkt mit Shell-Expansion der Dateinamen arbeiten:
    Code:
    for filename in a1 ${dir%/}/*.txt
    "filename" anstelle von "i" ist aussagekräftiger. ${dir%/} anstelle von $dir entfernt den Slash am Ende der Variable $dir, falls vorhanden (sonst hast du /home/foo//bar.txt).

    Hinweis zu find: Es ist zu berücksichtigen, dass find reqursiv den Verzeichnisbaum hinabsteigt, während ${dir}/*.txt nur das Verzeichnis listet. Je nach Anwendung ist das eine oder andere gewünscht.

    Hinweis zu set -x: Wer zu faul ist set -x in das Script zu schreiben kann das Script auch mit "sh -x script.sh" aufrufen.

    Gruss, Andy

  9. #9
    Registrierter Benutzer
    Registriert seit
    20.02.2004
    Ort
    Boeblingen
    Beiträge
    90
    man bedenke auch, dass expansion mit dem * nicht fuer generische Scripte zu verwenden ist, da es bei zu vielen Dateien nicht mehr funktioniert...

  10. #10
    Registrierter Benutzer Avatar von peschmae
    Registriert seit
    14.03.2002
    Ort
    Schweizland
    Beiträge
    4.549
    Sicher? Bei mir geht das auch mit 15000 Dateien mit jeweils 20 Zeichen langen Dateinamen bestens. Habs eben getestet.

    Allerdings geht sowas nur mit for-Schleifen gut. Ein "rm *" mit so vielen Dateien schlägt fehl währenddem ein "for f in *; do rm $f; done" trotzdem noch geht.

    MfG Peschmä
    The greatest trick the Devil ever pulled was convincing the world he didn't exist. -- The Usual Suspects (1995)
    Hey, I feel their pain. It's irritating as hell when people act like they have rights. The great old one (2006)

  11. #11
    Registrierter Benutzer Avatar von Hans-Georg Normann
    Registriert seit
    04.03.2000
    Ort
    Uetersen
    Beiträge
    571

    Lightbulb

    Zitat Zitat von RapidMax
    Hinweis zu find: Es ist zu berücksichtigen, dass find reqursiv den Verzeichnisbaum hinabsteigt, während ${dir}/*.txt nur das Verzeichnis listet.
    Nicht wenn die die Option -maxdepth verwendest.
    Zitat Zitat von man find
    -maxdepth Ebenen
    steigt bis zu der gegebenen Zahl von Ebenen im Verzeichnisbaum auf (in der Hierarchie ab); bei 0 Ebenen werden die Tests nur auf die in der Kommandozeile übergebenen Dateien und Verzeichnisnamen angewendet
    Hans
    333 Mhz, 466 MHz, neee, ich hab was neues zuhause.....

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •