Ordnern aus selektierten Dateien
Moderators: Hacker, Stefan2, white
Ordnern aus selektierten Dateien
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.
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)
MBP M3 (MacOS 14.1)
TC 9.51 x64 (W10 / Parallels 11)
TC 11.03 (crossover)
MBP M3 (MacOS 14.1)
TC 9.51 x64 (W10 / Parallels 11)
TC 11.03 (crossover)
Re: Ordnern aus selektierten Dateien
Im MUT:
- Search & Replace : Search for = ^(.+?)(\s-\s.*)
- Search & Replace : Replace with = $1\\$0
- Regex anhaken
- Start!
Re: Ordnern aus selektierten Dateien
Hallo NotNull,
Wahnsinn ... perfekt, genauso soll´s ausschauen.
Vielen Dank.
Wahnsinn ... perfekt, genauso soll´s ausschauen.
Vielen Dank.
MBP Mid12 (MacOS 10.13.6)
MBP M3 (MacOS 14.1)
TC 9.51 x64 (W10 / Parallels 11)
TC 11.03 (crossover)
MBP M3 (MacOS 14.1)
TC 9.51 x64 (W10 / Parallels 11)
TC 11.03 (crossover)
Re: Ordnern aus selektierten Dateien
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.
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)
MBP M3 (MacOS 14.1)
TC 9.51 x64 (W10 / Parallels 11)
TC 11.03 (crossover)
MBP M3 (MacOS 14.1)
TC 9.51 x64 (W10 / Parallels 11)
TC 11.03 (crossover)
- sqa_wizard
- Power Member
- Posts: 3893
- Joined: 2003-02-06, 11:41 UTC
- Location: Germany
Re: Ordnern aus selektierten Dateien
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!
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
Re: Ordnern aus selektierten Dateien
... und wenn Usenamen auch "@" und "_" enthalten können:
Suchen nach:
Ersetzen durch:
Suchen nach:
Code: Select all
^(.+?)@(.*)_
Code: Select all
$2\\$0
Re: Ordnern aus selektierten Dateien
@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?)
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)
MBP M3 (MacOS 14.1)
TC 9.51 x64 (W10 / Parallels 11)
TC 11.03 (crossover)
MBP M3 (MacOS 14.1)
TC 9.51 x64 (W10 / Parallels 11)
TC 11.03 (crossover)
- sqa_wizard
- Power Member
- Posts: 3893
- Joined: 2003-02-06, 11:41 UTC
- Location: Germany
Re: Ordnern aus selektierten Dateien
Im "Suchen" Dialog einfach [Hilfe] betätigen und dann bei RegEx den Link anklicken.Woher habt ihr euer RegEx-Wissen?
Die Beschreibung hilft schon einmal.
Ansonsten ... "Übung macht den Meister"
#5767 Personal license
- sqa_wizard
- Power Member
- Posts: 3893
- Joined: 2003-02-06, 11:41 UTC
- Location: Germany
Re: Ordnern aus selektierten Dateien
Im Feld "Ersetzen" steht :Woher kommen $2 und $0?
$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
Re: Ordnern aus selektierten Dateien
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
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
Re: Ordnern aus selektierten Dateien
Stimmt genau!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.
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)
Das habe ich - selbstversändlich - zuerst getestet, aber es gab Fehler damit (weiss leider nich mehr wie und wo).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
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


Also: wenn dass geht, wäre das die bessere Lösung
Re: Ordnern aus selektierten Dateien
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.
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)
MBP M3 (MacOS 14.1)
TC 9.51 x64 (W10 / Parallels 11)
TC 11.03 (crossover)
MBP M3 (MacOS 14.1)
TC 9.51 x64 (W10 / Parallels 11)
TC 11.03 (crossover)