Batch-Umbenennung mit regulären Ausdrücken, aber Beibehaltung einiger Teilzeichenfolgen

Batch-Umbenennung mit regulären Ausdrücken, aber Beibehaltung einiger Teilzeichenfolgen

Ich habe viel recherchiert, bevor ich diese Frage gestellt habe. Ich habe verschiedene Links zum Batch-Umbenennen mit regulären Ausdrücken wie diesen und anderen ähnlichen gefunden:

*Musterbasiert, Batch-Dateiumbenennung im Terminal

Mein Problem ist folgendes: Ich möchte eine Stapelumbenennung mit Regex durchführen, aber mein Code funktioniert nicht.

Ich habe in einem Ordner verschiedene Dateien mit den Namen:

name_house_1_door.jpg
name_house_2_door.jpg
name_house_3_door.jpg
name_house_4_door.jpg

Und ich möchte die Dateien folgendermaßen umbenennen:

name_house_1.jpg
name_house_2.jpg
name_house_3.jpg
name_house_4.jpg

Der Code, der dem, was ich möchte, am nächsten kommt, war:

$  rename -v 's/house\_[0-9]\_door/house_[0-9]/'

Aber wie Sie wissen sollten, wurde die erste Datei wie folgt umbenannt: name_house_[0-9].jpg

Antwort1

Viel einfacher wäre es, einfach _doormit „Umbenennen“ zu löschen:

rename -v 's/_door//' *

Dadurch wird danach gesucht _doorund es durch nichts ersetzt, d. h. es wird im Wesentlichen gelöscht.

Antwort2

  1. Sie umgehen den Unterstrich auf der Suchseite des Ausdrucks, obwohl dies nicht der Fall sein sollte.
  2. Sie benötigen eine Untersuche (die Zahlen) und einen Platzhalter, um das Ergebnis der Untersuche zu speichern und zu verwenden.

Durch Hinzufügen von Klammern um [0-9] wird die erforderliche Untersuche erstellt. Da es sich um die erste Untersuche handelt, kann sie auf der Ersetzungsseite als $1 bezeichnet werden. Das Ergebnis folgt.

rename -v 's/house_([0-9])\_door/house_$1/' *

Hoffe das hilft.

Antwort3

Sie benötigenRückverweise. Zeichenklassen bedeuten im Ersetzungsausdruck nichts. Tatsächlich haben nur wenige Zeichen im Ersetzungsausdruck eine besondere Bedeutung. Ich vermute so etwas wie:

rename -v 's/house_([0-9])_door/house_$1/'

(oder)

rename -v 's/(house_[0-9])_door/$1/'

Verwenden Sie die -nFlagge außerdem, um zu sehen, welche Umbenennungen erfolgen, bevor Sie sie tatsächlich durchführen.

Antwort4

Dies funktioniert in Fish Shell

for file in *.jpg;  
    mv -n $file (basename $file _door.jpg).jpg; 
end

verwandte Informationen