Ich versuche, einen einfachen Cronjob zu schreiben, der die darin verschachtelten Ordner und Dateien rekursiv durchläuft /OneDrive
und Datei- oder Ordnernamenzeichen ersetzt, die nicht A-Z
, a-z
, 0-9
oder .
durch ein _
. (Dies erscheint mir als der einfachste Weg, um Synchronisierungsfehler zu beheben.)
Aufbauend auf diesem StackExchange-Beitrag habe ich es geschafft, den größten Teil des Weges dorthin zu gelangen, indem ich Folgendes verwendet habe:
zmv '**/*' '$f:h${${f:t}//[^A-Za-z0-9]/_}'
Dieser Regex-Ausdruck schließt jedoch ' s nicht.
aus, was dazu führt, dass alle Dateierweiterungen in allen meinen Ordnern in _
s geändert werden (z. B. file.txt
wird file_txt
).
Ich bin weit davon entfernt, ein fortgeschrittener Regex-Benutzer zu sein, und alle verschiedenen Permutationen dieses Befehls, die ich verwendet habe, haben Fehler ausgelöst, darunter:
zmv '**/*' '$f:h${${f:t}//[^\.A-Za-z0-9]/_}'
zmv '**/*' '$f:h${${f:t}//[^.A-Za-z0-9]/_}'
zmv '**/*' '$f:h${${f:t}//[^A-Za-z0-9\.]/_}'
Ich bin mir sicher, dass der richtige Regex-Ausdruck offensichtlich ist; Ich fürchte, es ist mir einfach nicht klar.
Wenn jemand hier eine Anleitung geben könnte, zusammen mit einer kurzen Erklärung, warum meine vorherigen Versuche nicht funktionierten, wäre ich dankbar für den kleinen Beitrag zu meinem Verständnis von Regex.
Lösung des Problems
Der :h
Modifikator hat einen Schrägstrich entfernt; Dies hat es wieder hinzugefügt:
zmv '**/*' '$f:h/${${f:t}//[^\.A-Za-z0-9]/_}'
Ich bin mir nicht sicher, warum das in der ursprünglichen Antwort fehlte, auf die Sie verwiesen haben.
Einige Anmerkungen / Vorbehalte:
- Die
-n
Option fürzmv
kann beim Aufspüren solcher Probleme sehr hilfreich sein. - ein einzelner Aufruf von
zmv
kann möglicherweise nicht sowohl Dateinamen als auch Verzeichnisnamen umbenennen; mehrere Durchgänge könnten erforderlich sein. zmv
verwendet Datei-Globing-Muster. Globbing-Muster ähneln regulären Ausdrücken, aber es gibt eine Reihe signifikanter Unterschiede, sodass ein Großteil der Dokumentation für reguläre Ausdrücke hier nicht zutrifft.
Keine Kommentare:
Kommentar veröffentlichen