Ordnern aus selektierten Dateien

German support forum

Moderators: white, Hacker, Stefan2

Post Reply
User avatar
truecolor
Junior Member
Junior Member
Posts: 71
Joined: 2010-02-18, 14:30 UTC
Location: Raum HD (BaWü)

Ordnern aus selektierten Dateien

Post by *truecolor »

Hallo,

ich bin auf der Suche nach einem Mix aus MUT und F7 (Verzeichnis erstellen).

Beispiel

markiert sind folgende Dateien:

Einstein, Albert - cccc ddd eee.txt
Einstein, Albert - fff gggggg - hhhh.txt
Einstein, Albert - cccc ddd eee.txt
Pan, Peter - jjjjjj (kkkkk) - llllll.txt
Pan, Peter - mmm nnnn oo.txt

TC soll Dateinamen bis zum Leerzeichen vor dem ersten Bindestrich finden (also Einstein, Albert und Pan, Peter) und daraus zwei Verzeichnisse erstellen. Danach sollen die Dateien, die mit Einstein, Albert und Pan, Peter beginnen in die jeweiligen Verzeichnis verschoben werden.

- Finde Text nach einem Suchkriterium
- extrahieren und daraus einen Verzeichnisnamen
- ignoriere weitere Dateien mit gleichem Namen
- erstelle mit dem Namen ein Verzeichnis
- Verschiebe alle zugehörigen Dateien in das richtige Verzeichnis

Scheint sehr komplex zu sein.

Ich hab mit RegEx und coding leider zu wenig Ahnung um das hin zu bekommen, würde mir aber meine Arbeit hier immens erleichtern.

Bitte um Hilfe.
MBP Mid12 (MacOS 10.13.6)
TC 9.51 x64 (W10 / Parallels 11)
NotNull
Senior Member
Senior Member
Posts: 266
Joined: 2019-11-25, 20:43 UTC
Location: NL

Re: Ordnern aus selektierten Dateien

Post by *NotNull »

Im MUT:
  • Search & Replace : Search for = ^(.+?)(\s-\s.*)
  • Search & Replace : Replace with = $1\\$0
  • Regex anhaken
  • Start!
User avatar
truecolor
Junior Member
Junior Member
Posts: 71
Joined: 2010-02-18, 14:30 UTC
Location: Raum HD (BaWü)

Re: Ordnern aus selektierten Dateien

Post by *truecolor »

Hallo NotNull,

Wahnsinn ... perfekt, genauso soll´s ausschauen.

Vielen Dank.
MBP Mid12 (MacOS 10.13.6)
TC 9.51 x64 (W10 / Parallels 11)
User avatar
truecolor
Junior Member
Junior Member
Posts: 71
Joined: 2010-02-18, 14:30 UTC
Location: Raum HD (BaWü)

Re: Ordnern aus selektierten Dateien

Post by *truecolor »

Hallo NotNull,

ich bräuchte nochmal Deine genialen RegEx-Kentnisse.

In einem Verzeichnis befinden sich hunderte von Videodateien.

Auszug:

2021-08-28_@bodoschaefer_7001534370314063109.mp4
2021-06-17_@your_best_teacher_5785423698745210268.mp4
2020-03-27_@droneracingleague_1953189762164566325.mp4
2021-08-26_@bodoschaefer_7230675790412670566.mp4
2021-05-28_@your_best_teacher_2031482741208283910.mp4
2021-08-27_@bodoschaefer_2400972769996375621.mp4
2020-02-14_@droneracingleague_6793129744737295621.mp4
.
.
.


Aufbau der Dateinamen:

YYYY-MM-DD_@usernamen_19stellige Indexnummern.mp4

Ich benötige eine RegEx-Lösung, mit der die Dateien nach Usernamen durchsucht werden, aus jedem gefundenen Usernamen ein Verzeichnis erstellt wird und alle Dateien in die entsprechenden Verzeichnisse verschoben werden.

Für mich leider unlösbar.
MBP Mid12 (MacOS 10.13.6)
TC 9.51 x64 (W10 / Parallels 11)
User avatar
sqa_wizard
Power Member
Power Member
Posts: 3854
Joined: 2003-02-06, 11:41 UTC
Location: Germany

Re: Ordnern aus selektierten Dateien

Post by *sqa_wizard »

Alle Dateien markieren.
Im Mehrfach-Umbenenn-Tool:
Suchen nach: (.*_@)(.*)(_\d{19})
Ersetzen durch: $2\\$1$2$3
[x] RegEx

Beachte beim Ersetzen den doppelten \\ um die RegEx-Sonderbedeutung des \ aufzuheben!
#5767 Personal license
NotNull
Senior Member
Senior Member
Posts: 266
Joined: 2019-11-25, 20:43 UTC
Location: NL

Re: Ordnern aus selektierten Dateien

Post by *NotNull »

... und wenn Usenamen auch "@" und "_" enthalten können:

Suchen nach:

Code: Select all

^(.+?)@(.*)_
Ersetzen durch:

Code: Select all

$2\\$0
User avatar
truecolor
Junior Member
Junior Member
Posts: 71
Joined: 2010-02-18, 14:30 UTC
Location: Raum HD (BaWü)

Re: Ordnern aus selektierten Dateien

Post by *truecolor »

@sqa_wizard und @NotNull,

vielen Dank für eure Hilfe.

Da im Usernamen auch _ vorkommt, kam nach einem Probelauf die Lösung von NotNull zum Einsatz.Hap prima geklappt und mir viele graue Haare erspart. Vielen Dank.


Auf der Seite

https://regex101.com/

hab ich Dein regex-Code ^(.+?)@(.*)_ über einen meiner Dateinamen laufen lassen.

Hab auf der Seite dann mal den enthaltenen Debugger drüberlaufen lassen um zu sehen, wie Dein regex-Code ^(.+?)@(.*)_ arbeitet.

Wenn ich das richtig verstanden habe, dient der vordere Teil ^(.+?)@ dazu, von links den String abzusuchen, bis er das erste Mal @ findet.
Danach arbeitet sich der zweite Teil vom regex-Code (.*)_ von rechts so lange durch, bis er das erste Mal _ findet.

Soweit hoffe ich mal das richtig interpretiert zu haben.

Was passiert aber im Regex-Code von "Ersetzen durch"? Woher kommen $2 und $0?

Sind das Variablen? Wenn ja, woher weiss ich, was worin enthalten ist?

(Woher habt ihr euer RegEx-Wissen?)
MBP Mid12 (MacOS 10.13.6)
TC 9.51 x64 (W10 / Parallels 11)
User avatar
sqa_wizard
Power Member
Power Member
Posts: 3854
Joined: 2003-02-06, 11:41 UTC
Location: Germany

Re: Ordnern aus selektierten Dateien

Post by *sqa_wizard »

Woher habt ihr euer RegEx-Wissen?
Im "Suchen" Dialog einfach [Hilfe] betätigen und dann bei RegEx den Link anklicken.
Die Beschreibung hilft schon einmal.
Ansonsten ... "Übung macht den Meister"
#5767 Personal license
User avatar
sqa_wizard
Power Member
Power Member
Posts: 3854
Joined: 2003-02-06, 11:41 UTC
Location: Germany

Re: Ordnern aus selektierten Dateien

Post by *sqa_wizard »

Woher kommen $2 und $0?
Im Feld "Ersetzen" steht :
$1 für den gefundenen Teil der ersten Klammer (.+?)
$2 für den gefundenen Teil der zweiten Klammer (.*)
$0 für den gesamten Originaltext
#5767 Personal license
User avatar
Stefan2
Power Member
Power Member
Posts: 4132
Joined: 2007-09-13, 22:20 UTC
Location: Europa

Re: Ordnern aus selektierten Dateien

Post by *Stefan2 »

Dort hatten wir schon einmal etwas gesammelt > https://ghisler.ch/board/viewtopic.php?p=323986#p323986


Für diesen Fall:

YYYY-MM-DD_@usernamen_19stellige Indexnummern.mp4
Suchen nach: ^(.+?)@(.*)_
Ersetzen durch: $2\\$0


Erklärung:
^ ... starte die Suche am Anfang
(.+?)...suche als nächstes ein beliebiges Zeichen (.) und das ein-oder-mehrmals (+) aber non-greedy (?)
.........und speichere es in einer Backrefernce-Gruppe Nummer $1 (YYYY-MM-DD_)
@ ... suche als nächstes ein tatsächliches Zeichen "@"
(.*) ... suche als nächstes ein beliebiges Zeichen (.) und das null-oder-mehrmals (*), also da kann etwas sein oder auch nicht (usernamen) als $2
_ ... suche als nächstes ein tatsächliches Zeichen "_"

Dabei wird jeder Teilausdruck nur solange gesucht, bis die Suche auf den nächsten Ausdruck trifft. Die RegEx-Engine sucht also immer Vorwärts und geht dann bei Fund wieder ein Schritt zurück.

Im Ersetzen-Teil können dann diese Gruppen wiederverwendet werden, also hier nur $2 und dann noch $0, was für den gesamten Ursprungsstring steht.


Somit müsste es auch hiermit funktionieren, wobei dies eventuell zu deinem Verständnis beiträgt:
Suchen nach: ^.+?@(.*)_
Ersetzen durch: $1\\$0

Und das non-greedy ist auch nicht nötig, da nur ein @ existiert, und da stoppt die Engine sowieso, da das ein literales Zeichen ist:
Suchen nach: ^.+@(.*)_
Ersetzen durch: $1\\$0






 
NotNull
Senior Member
Senior Member
Posts: 266
Joined: 2019-11-25, 20:43 UTC
Location: NL

Re: Ordnern aus selektierten Dateien

Post by *NotNull »

truecolor wrote: 2021-10-19, 15:12 UTC Wenn ich das richtig verstanden habe, dient der vordere Teil ^(.+?)@ dazu, von links den String abzusuchen, bis er das erste Mal @ findet.
Danach arbeitet sich der zweite Teil vom regex-Code (.*)_ von rechts so lange durch, bis er das erste Mal _ findet.
Stimmt genau!
Das erste Teil heisst "lazy matching": Ende wenn der erste "@" gefunden ist; mach keine weitere Mühe).
Das tweite Teil sucht bis der *letzte* "_ " gefunden ist ("greedy matching"), was im Grunde dasselbe ist als 'der Erste von rechts'.

(Fast alles was ich über regex kenne, hab ich in die Everything Foren gelernt (voidtools.com). Einfach versuchen Fragen zu beantworten , Antworten 'nachspielen' und viel experimentieren)


Stefan2 wrote: 2021-10-19, 16:42 UTC Somit müsste es auch hiermit funktionieren, wobei dies eventuell zu deinem Verständnis beiträgt:
Suchen nach: ^.+?@(.*)_
Ersetzen durch: $1\\$0
Das habe ich - selbstversändlich - zuerst getestet, aber es gab Fehler damit (weiss leider nich mehr wie und wo).
Meine Vermutung war, das es mit den Abweichungen in TC's regex Library/Engine zu tun hätte. Deshalb dieses Alternativ.

Aber ... hab es gerade nochmals getestet und jetzt geht es ohne Fehler :? :shock:
Also: wenn dass geht, wäre das die bessere Lösung
User avatar
truecolor
Junior Member
Junior Member
Posts: 71
Joined: 2010-02-18, 14:30 UTC
Location: Raum HD (BaWü)

Re: Ordnern aus selektierten Dateien

Post by *truecolor »

Hi @all,

hab gestern Dank eurer Unterstützung mein erstes eigenes RegEx erstellt ... hat funktioniert.

Ist gar nicht soo schwer, wenn man das mal richtig erklärt bekommen hat.
MBP Mid12 (MacOS 10.13.6)
TC 9.51 x64 (W10 / Parallels 11)
Post Reply