GOOGLE ADS

Mittwoch, 20. April 2022

Einschließlich des Punktzeichens (".") in einem zmv-Regex-Bereichsfilter

Ich versuche, einen einfachen Cronjob zu schreiben, der die darin verschachtelten Ordner und Dateien rekursiv durchläuft /OneDriveund Datei- oder Ordnernamenzeichen ersetzt, die nicht A-Z, a-z, 0-9oder .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.txtwird 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 :hModifikator 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 -nOption für zmvkann beim Aufspüren solcher Probleme sehr hilfreich sein.

  • ein einzelner Aufruf von zmvkann möglicherweise nicht sowohl Dateinamen als auch Verzeichnisnamen umbenennen; mehrere Durchgänge könnten erforderlich sein.

  • zmvverwendet 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

Warum werden SCHED_FIFO-Threads derselben physischen CPU zugewiesen, obwohl CPUs im Leerlauf verfügbar sind?

Lösung des Problems Wenn ich das richtig verstehe, versuchen Sie, SCHED_FIFO mit aktiviertem Hyperthreading ("HT") zu verwenden, ...