Abgleich von () mit einem Unix/Linux-Regex

Abgleich von () mit einem Unix/Linux-Regex

Ich habe ein paar Dateien mit dem Namen

(a).1
(a).2
...
(a).100

Da viele Verarbeitungstools „und“ im Dateinamen nicht wirklich mögen (, )dachte ich, es wäre am besten, sie umzubenennen. Ich habe nach dem Umbenennen von Dateien gegoogelt und das wunderbare Tool gefunden, renamein das ich einen regulären Ausdruck eingeben kann. Okay, versuchen wir Folgendes:

$ rename -v s/\(a\)/b/ \(a\).* 

(a).1 renamed as (b).1
(a).2 renamed as (b).2
(a).3 renamed as (b).3

Hmm, nicht das, was ich erwartet hatte. Nach ein bisschen googeln fand ich heraus, dass es \( \)sich um eineGruppierungsoperator. Das macht irgendwie Sinn, da ich ( )im Befehl nicht entkommen bin.

Ich habe mein Umbenennungsproblem gelöst, indem ich das .Zeichen verwendet habe, das mit allen Wertetypen übereinstimmt:

rename -v s/.b./b/ \(b\).*

Diese Lösung ist nicht wirklich schön. Wie kann ich also „ (und“ )in Bash/Linux/Unix Regex abgleichen?

Antwort1

Das benötigen Sie:

find -name "(*)*" -type f | rename 's/\(|\)//g'

Zuerst sucht es im aktuellen Verzeichnis nach Dateien, die dem beschriebenen Namen entsprechen, und benennt sie dann um, indem es die Klammern entfernt. Sie können sehen, dass die übereinstimmenden Zeichen ( und ) durch nichts ersetzt werden.

verwandte Informationen