Zusammengehörige Dateipaare: finde Einzelne ohne Partner

German support forum

Moderators: Hacker, Stefan2, white

Post Reply
User avatar
klsgfx
Junior Member
Junior Member
Posts: 74
Joined: 2003-11-21, 14:40 UTC
Location: Berlin

Zusammengehörige Dateipaare: finde Einzelne ohne Partner

Post by *klsgfx »

Hallo Kinder,

für folgendes Problem konnte ich bis dato weder eine Lösung erarbeiten noch im Forum Hilfreiches finden, vielleicht hat ja einer von Euch eine Idee:

Ich habe ein großes Verzeichnis mit vielen Unterverzeichnissen. Darin liegen idealerweise Paare von Dateien nach solch einem Schema:
dateiname. (man beachte: keine Endung)
dateiname--zusatz.xml (zusatz ist 3 oder 4 Zeichen groß)
dateiname ist bei einem Pärchen natürlich immer gleich.

Dummerweise gibt es ab und an zu einer Datei dateiname. keinen Partner. Solcherart Dateien möchte ich alle finden, auswählen und verschieben.
Kein Problem, denke ich mir und versuche folgendes über die Dateiauswahl:
*--???.xml > *.
und dann noch Auswahl erweitern:
*--????.xml > *.
Nun sollten alle Pärchen markiert sein und ich müsste nur noch die Auswahl umkehren.
Denkste.
Es sind nur die xml-Dateien markiert, keine Pärchen.

Geht das Gewünschte mit TC (Bordmitteln oder dem einen oder anderen Plugin) oder muss ich doch ein Script schreiben?

Hat wer eine Idee?

Danke.

Gruß,
Klaus
Last edited by klsgfx on 2015-09-18, 16:08 UTC, edited 2 times in total.
User avatar
milo1012
Power Member
Power Member
Posts: 1158
Joined: 2012-02-02, 19:23 UTC

Post by *milo1012 »

Interessant:

Code: Select all

*--????.xml>*.
funktioniert theoretisch, markiert aber tatsächlich nur xml-Dateien.
Das könnte aber zumindest an fehlender Dateiendung liegen.

Aber: wenn du jetzt das Muster drehst funktioniert:

Code: Select all

*.>*--????.xml
offenbar auch nicht, aus für mich nicht nachvollziehbaren Gründen.
Es werden nur Dateien ohne Endung markiert, auch solche ohne zugehöriger xml-Datei.

Ersteres könnte ich noch nachvollziehen, wegen fehlender Endung, da könnte man sich mit dem MRT kurzzeitig aushelfen.
(allen Dateien eine Endung geben, und später rückgängig machen)

Aber das zweite sollte man vielleicht als Bug einstufen, denn selbst bei sauberer Dateiendung scheint da einiges nicht nachvollziehbar zu sein.
Denn

Code: Select all

*.jpg>*.cr2
markiert (alles in []) korrekt:

Code: Select all

allein.jpg
[bar.jpg]
[bar.cr2]
[foo.jpg]
[foo.cr2]
non.txt
aber

Code: Select all

*.cr2>*.jpg
markiert

Code: Select all

[allein.jpg]
[bar.jpg]
[bar.cr2]
[foo.jpg]
[foo.cr2]
non.txt
Warum wird in diesem Fall allein.jpg markiert?



Zwischenzeitlich könnte ich eine (kompliziertere) Alternativlösung mit RegEx und einem Plug-in anbieten.
Last edited by milo1012 on 2015-09-18, 15:24 UTC, edited 1 time in total.
TC plugins: PCREsearch and RegXtract
User avatar
klsgfx
Junior Member
Junior Member
Posts: 74
Joined: 2003-11-21, 14:40 UTC
Location: Berlin

Post by *klsgfx »

milo1012 wrote:Interessant:

Code: Select all

*--????.xml>*.
funktioniert.

Aber: wenn du jetzt das Muster drehst funktioniert:

Code: Select all

*.>*--????.xml
offenbar tatsächlich nicht
Das war mir auch aufgefallen, ich habe es aber auf das * geschoben.
milo1012 wrote:Zwischenzeitlich könnte ich die eine (kompliziertere) Alternativlösung mit RegEx und einem Plug-in anbieten.
Gerne - immer her damit.

Gruß,
Klaus
User avatar
milo1012
Power Member
Power Member
Posts: 1158
Joined: 2012-02-02, 19:23 UTC

Post by *milo1012 »

Hatte meine Antwort eben überarbeitet.
Ich würde dir erstmal die Lösung mit MRT und Dateiendung empfehlen.
TC plugins: PCREsearch and RegXtract
User avatar
klsgfx
Junior Member
Junior Member
Posts: 74
Joined: 2003-11-21, 14:40 UTC
Location: Berlin

Post by *klsgfx »

Nun bin ich verwirrt:

Code: Select all

0001.ups
0001--abc.xml
0002.ups
0003.ups
0003--abc.xml
0004.ups
0004--edf.xml
0005.ups
0005--abc.xml
0006.ups
*--???.xml > *.ups
markiert nur die xml-Dateien, wohingegen
*.ups > *--???.xml
nur die ups-Dateien markiert.

Öhm.
User avatar
milo1012
Power Member
Power Member
Posts: 1158
Joined: 2012-02-02, 19:23 UTC

Post by *milo1012 »

Hm, das liegt dann wohl eher am zweiten "Platzhalter" als an der Endung.
Vermutlich erwartet TC immer nur einen Platzhalter, den er vergleichen kann,

Code: Select all

*--???.xml
beinhaltet aber schon zwei (bzw. einen und drei zusammenhängende).


Ich glaube das wird mit TC-Bordmitteln nichts.
Gib mir etwas Zeit, dann schau ich mal nach der Alternativlösung,
falls niemand anders das Problem zwischenzeitlich lösen oder erklären kann.
TC plugins: PCREsearch and RegXtract
User avatar
klsgfx
Junior Member
Junior Member
Posts: 74
Joined: 2003-11-21, 14:40 UTC
Location: Berlin

Post by *klsgfx »

Mach Dir keinen Streß. Ich würde die Lösung über Plugins schon gerne wissen, werde aber wohl doch wohl erst einmal ein Script schreiben.
Hm, das liegt dann wohl eher am zweiten "Platzhalter" als an der Endung.
Vermutlich erwartet TC immer nur einen Platzhalter, den er vergleichen kann
Das wird's wohl sein. Ich hatte mir ja (auch deswegen) schon öfter gewünscht im Dialog Auswahl erweitern RegEx verwenden zu können.

Danke.

Gruß,
Klaus
User avatar
milo1012
Power Member
Power Member
Posts: 1158
Joined: 2012-02-02, 19:23 UTC

Post by *milo1012 »

Basierend auf dieser Lösung:

Was voraussetzt dass in der aktuellen Sortierung eine XML-Datei immer nach einer Datei ohne Endung kommt.
Also am besten TC's Standard-Sortier-Methode einstellen (nach Namen absteigend lassen).

Vorgehen:
Alle Dateinamen markieren und cm_SaveSelectionToFile anwenden
Lass die Dateiliste offen.

Diese gerade erzeugte Ausgabedatei jetzt mit z.B. meinem RegXtract-Plugin anwenden (in neuem TC-Fenster oder anderem Tab, etc.)
RegEx z.B.:

Code: Select all

(.+)\R.+--.{3,4}\.xml
Ersatz-Schema

Code: Select all

$0
Sonst Standardeinstellungen.

Ausgabedatei in ein neues Verzeichnis schreiben lassen oder ins selbe aber mit anderen Namen (Ausgabedatei darf nicht Eingabedatei sein).
Die noch offene Dateiliste nutzen und alle Markierungen löschen.

Jetzt das Entscheidende:
cm_LoadSelectionFromFile
und die eben durch das Plug-in erzeugte Ausgabedatei laden.
Es sollten jetzt alle "Paare" markiert sein.
Jetzt nur noch die Markierung umkehren.

Hat nur den Nachteil dass die Dateinamen nicht "wirklich" verglichen werden,
aber wenn die Sortierung stimmt reicht das so aus.

Für einen echten Vergleich nimm:

Code: Select all

(.+)\R\g{1}--.{3,4}\.xml



Update:
Da ich nicht ganz sicher bin was TC bei cm_LoadSelectionFromFile als Format erwartet,
und es sonst Probleme mit nicht-ASCII-Zeichen gibt:
Entweder in RegXtract:
[X] Binärmodus
aktivieren, damit das ANSI-Format beibehalten wird, oder
[X] Schreibe UTF-8-BOM
aktivieren, damit TC UTF-8 korrekt erkennt.
TC plugins: PCREsearch and RegXtract
User avatar
klsgfx
Junior Member
Junior Member
Posts: 74
Joined: 2003-11-21, 14:40 UTC
Location: Berlin

Post by *klsgfx »

So, bin nun dazu gekommen, Deine Lösung zu testen.
Funktioniert super.

Danke Dir!
Post Reply