Text Dateien umbenennen Aufgrund vom Inhalt

Atomitanz

Atomitanz

Mitglied
Thread Starter
Dabei seit
15.01.2004
Beiträge
67
Reaktionspunkte
1
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
 
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.
 
Atomitanz schrieb:
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.

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
 
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.
 
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
 
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
 
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
 
Atomitanz schrieb:
...
Auf meiner Suche bin ich gestern auf AWK gestossen. Damit sollte es eigentlich recht einfache :rolleyes: sein. Hat da jemand Erfahrungen?
...
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!
 
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.
 
canfAN schrieb:
Code:
opendir(DIR, $dir) || die("Kann Verzeichnis '$dir' nicht öffnen.\n");
my @files = grep(/\.txt$/, readdir(DIR));
closedir(DIR);

Faulheit siegt ;)

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

udo
 
Vielen Dank

Hallo zusammen,


vielen Dank für die vielen Tipps.

UdoN hat recht: "Faulheit siegt". :D

Ich habe in unserem Firmenintranet festgestellt, das LabView für den Mac angeschafft wurde (ohne das ich es erfahren habe:rolleyes:). Da ich eine Ausbildung für die Programmiersprache G (Labview) habe, war das Konvertierungsscript kein Problem mehr. pepp

Trotzdem nochmal vielen Dank für die vielen Tipps. Ohne Labview hätte ich mich heute ans programieren gemacht :D


Gruss
Atomitanz
 
Zurück
Oben Unten