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 _door
mit „Umbenennen“ zu löschen:
rename -v 's/_door//' *
Dadurch wird danach gesucht _door
und es durch nichts ersetzt, d. h. es wird im Wesentlichen gelöscht.
Antwort2
- Sie umgehen den Unterstrich auf der Suchseite des Ausdrucks, obwohl dies nicht der Fall sein sollte.
- 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 -n
Flagge 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