Text Dateien umbenennen Aufgrund vom Inhalt

Dieses Thema im Forum "Mac OS Entwickler, Programmierer" wurde erstellt von Atomitanz, 25.10.2004.

  1. Atomitanz

    Atomitanz Thread Starter MacUser Mitglied

    Beiträge:
    67
    Zustimmungen:
    0
    Mitglied seit:
    15.01.2004
    Hallo zusammen,

    Heute hab ich ein Problem der ganz besonderen Art :D :

    Ich möchte eine Unmenge an Textdateien aufgrund Ihres Inhaltes umbenennen. Also in der Datei "seite 10.txt" kommt zum Beispiel irgendwo der Text "IDNummer: 12345" und ich möchte nun die Datei automatisch in "12345.txt" umbenennen.

    Da es sich um ca. 500 Dateien handelt die automatisch von einem anderen Program erzeugt werden (auf das ich keinerlei Einfluss habe) und ich diese Umwandlung des öffteren durchführen müsste wäre ein Script schön.

    Hat jemand Vorschläge?

    Danke im Voraus

    Gruss
    Atomitanz
     
  2. Placebo

    Placebo MacUser Mitglied

    Beiträge:
    210
    Zustimmungen:
    0
    Mitglied seit:
    24.10.2004
    Vielleicht versuchst du es mal im AppleScript-Forum oder auf anderen Webseiten die sich damit beschäftigen wie zb hier http://fischer-bayern.de/applescript/html/mag.html.

    Als Hinweis gebe ich dir hier noch eine kleine Überlegung mit auf den Weg. Für dein Vorhaben bräuchtest du ein Script welches eng mit deinem Texteditor und dem Finder arbeitet. Die Scriptfunktion sollte das Öffnen, Lesen und Text-Kopieren und Einsetzen in Texten beherrschen. So ein Script kostet viel Zeit und Aufwand und es wird dir niemand kostenlos programmieren. Es gibt meines Wissens kein Programm welche diese Funktionen anbietet. Und wenn, dann dürften sich die Kosten dafür im dreistelligen Bereich bewegen.

    Versuche doch mal einen kompletten Arbeitsgang deines Vorhabens manuell durchzuführen und benutze dabei die Aufzeichnungsfunktion (Recorder) des Scripteditors, dann wirst du sehen was passiert.
     
  3. UdoN

    UdoN MacUser Mitglied

    Beiträge:
    236
    Zustimmungen:
    0
    Mitglied seit:
    18.06.2004
    Was steht vor/hinter dem 'IDNummer: xxxxx'?
    Ist das bei allen Dateien gleich (auch die gross/klein Schreibung)?
    Ich wuerde sowas mit Perl machen.
    Wie placebo schrieb ist wohl Applescript nicht geeignet.
    Mit der Shell oder Perl sollte das aber kein Problem sein. Du musst nur wissen nach welchen Regel das 'IDNummer...' in die Dateien eingefuegt wird.

    Udo
     
  4. maceis

    maceis MacUser Mitglied

    Beiträge:
    16.693
    Zustimmungen:
    602
    Mitglied seit:
    24.09.2003
    Ich stimme UdoN zu.
    mit einem Shellskript wäre das durchaus machbar.

    kleine Anregung:
    mit "grep -r" kannst Du Dateien (-r=> rekursiv) nach bestimmten Suchmustern durchsuchen (z. B. falls Du die Dateien erst nach bestimmten Kriterien sortieren musst);
    mit "sed" kannst Du eine Datei zeilenweise durchsuchen, editieren und ggf. ändern;
    Mit "cut" kannst du aus aus Zeilen bestimmte Teile (z. B. die ID Nummer) ausschneiden und ggf. in eine Variable speichern.
    Mit dieser Variablen kannst Du dann die Umbennennung steuern.

    Perl kommt sicher auch in Frage.
    Die Syntax ist etwas anders, aber die Methode dürfte auf das selbe hinauslaufen.
     
  5. calinux

    calinux MacUser Mitglied

    Beiträge:
    64
    Zustimmungen:
    0
    Mitglied seit:
    28.09.2004
    Juuten Abend! ;)

    Wenn man folgendes noch ein kleines bisschen "aufbohrt" kommt man mit Sicherheit ans Ziel.. auch ganz ohne teures Skript :)


    find ./ -name `egrep -l -s -r "regulaerer_Ausdruck" *` -exec mv \{\} ID_regulaerer_Ausdruck.txt \;


    Allerdings kommt man wohl net ohne eine Variable aus, (oder etwa doch? :)) daher würd ich das ganze in ein Shell-Skript verpacken- oder wie schon andere gesagt haben: in Perl schreiben *g* :)

    Soll nur ne kleine Hilfestellung gewesen sein.. für "MEHR" bin ich inzwischen zu müde..

    Gutes Nächtle wünsch ich noch :)

    calinux
     
  6. Atomitanz

    Atomitanz Thread Starter MacUser Mitglied

    Beiträge:
    67
    Zustimmungen:
    0
    Mitglied seit:
    15.01.2004
    Hallo zuusammen,

    danke für die Tipps. Das aussehen der IDNummer kann ich beeinflussen, somit sollte das kein Problem darstellen.

    calinux kommt dem was mir vorschwebt recht nahe. Auf meiner Suche bin ich gestern auf AWK gestossen. Damit sollte es eigentlich recht einfache :rolleyes: sein. Hat da jemand Erfahrungen?

    Mit Shellprogramierungen habe ich erst angefangen, aber damit möchte ich es eigentlich durchführen. Perl habe ich 0 Ahnung und Applescript finde ich wiederum zu kompliziert und wahrscheinlich in der Ausführung am Ende zu langsam (für dieses "simple" Problem).

    Gruss
    Atomitanz
     
  7. canfAN

    canfAN MacUser Mitglied

    Beiträge:
    66
    Zustimmungen:
    0
    Mitglied seit:
    06.02.2003
    Vielleicht ungefähr so: (Perl, ungetestet!)

    Code:
    #!/usr/bin/perl -w
    
    use strict;
    
    my $dir = $ARGV[0] || die("Kein Verzeichnis angegeben!\n");
    opendir(DIR, $dir) || die("Kann Verzeichnis '$dir' nicht öffnen.\n");
    my @files = grep(/\.txt$/, readdir(DIR));
    closedir(DIR);
    chdir($dir);
    
    foreach my $file (@files)
    {
       my $filename;
       my $text;
    	 
       open(FILE, $file) || die("Kann Datei '$file' nicht lesen.\n");
       $text = <FILE>;
       close(FILE) ||die("Kann Datei '$file' nicht schließen.\n");
    	
       # IDNummer: (\d+) entsprechend anpassen, 
       # \d+ steht für beliebig viele Zahlen
       if ($text =~ /IDNummer: (\d+)/s)
       {
          # Diese Zahlen werden mit '.txt' der neue Dateiname
          $filename = $1 . ".txt"; 
          rename($file, $filename);
       }
    }
    
    Als bla abspeichern und dann chmod 755 bla; ./bla /Users/meinverzeichnis/meinedateien
     
  8. maceis

    maceis MacUser Mitglied

    Beiträge:
    16.693
    Zustimmungen:
    602
    Mitglied seit:
    24.09.2003
    Ich hab mal was mit awk versucht.
    Hatte mich damals erstmal ziemlich verzettelt.
    Da würde ich eher versuchen "sed" einzusetzen. Sollte bei entsprechendem "Kopfeinsatz" auch in einer Zeile machbar sein ;)
    Viel Erfolg!
     
  9. Agmemon

    Agmemon MacUser Mitglied

    Beiträge:
    172
    Zustimmungen:
    0
    Mitglied seit:
    05.11.2003
    Prinzipiell kannst Du jede Scriptsprache nutzen: Perl, AWK, Ruby, usw.

    Such dir einfach was aus, was Dir gefällt. Ich persönlich würde sagen, das Du es mit Ruby am schnellsten hinbekommst, da man sich da sehr schnell eingearbeitet hat.
     
  10. UdoN

    UdoN MacUser Mitglied

    Beiträge:
    236
    Zustimmungen:
    0
    Mitglied seit:
    18.06.2004
    Faulheit siegt ;)

    Code:
    for (grep {-f} glob "$dir/*.txt")
    {
    my $text = `cat $_`;
    ...
    udo
     
Die Seite wird geladen...

Diese Seite empfehlen