Batch-Umbenennungsdateien im Ordner


10

Wie kann ich Text aus Dateinamen in einem Ordner entfernen?

Ich versuche gerade:

rename s/"NEWER_(.*?)"//g *

Aber nichts, was umbenannt wird

Ich habe einen übergeordneten Ordner mit einer Reihe von Unterordnern in Dateien, an die OneDrive eine großartige Idee zum Anhängen eines "(NEWER_timestamp)" halten möchte, und das möchte ich entfernen.

Beispieldateinamen:

getyou.ico (NEWER_1417529079.87)
o7pm.ico (NEWER_1417529184.89)
o7th.ico (NEWER_1417529135.81)

2
Können Sie einen Beispieldateinamen posten?
Muru

sicher. aktualisierte Frage mit einigen
Kevin

Antworten:


8

Versuche Folgendes:

find /path/to/parrent-dir -type f -exec rename -n 's:[^/]*(.*) .*$:$1:' {} +

./o7th.ico (NEWER_1417529135.81)                                 renamed as /o7th.ico
./sub-dir (NEWER_1417529135.81)/getyou.ico (NEWER_1417529079.87) renamed as /sub-dir (NEWER_1417529135.81)/getyou.ico
./sub-dir (NEWER_1417529135.81)/o7pm.ico (NEWER_1417529184.89)   renamed as /sub-dir (NEWER_1417529135.81)/o7pm.ico
./getyou.ico (NEWER_1417529079.87)                               renamed as /getyou.ico
./o7pm.ico (NEWER_1417529184.89)                                 renamed as /o7pm.ico
  • Alle [^/]*(.*) .*$stimmen nur mit dem letzten Teil des Pfads überein, der kein a enthält /. Und
  • In der obigen Regex (.*)ist eine Gruppe von Übereinstimmungen nach dem letzten /und vor einem Leerzeichen . Sein Rückverweis wird sein $1.
  • .*$Ordnet alles dem $Namen des Dateiende nach dem Leerzeichen zu.
  • Schließlich s/.../REPLACEMENT/haben wir als Ersatzteil des Umbenennens nur die übereinstimmende Gruppe zwischen dem letzten \und einem Leerzeichen beibehalten, das (.*)als Gruppe von Übereinstimmungen bezeichnet wird.

2

Sie sollten in Betracht ziehen, die Anführungszeichen außerhalb des regulären Ausdrucks zu verwenden (innerhalb werden sie wörtlich als Anführungszeichen verwendet) und zu entkommen (. Versuchen;

rename -n 's/ \(NEWER_\d{10}.\d{2}\)$//' *NEWER*

Die Genauigkeit des Ausdrucks ist möglicherweise nicht erforderlich, aber Sie können beim Ändern von Dateien nicht vorsichtig genug sein.


Alles, was dies tut, ist zu hängen. reading filenames from STDINIch bin bereits im übergeordneten Ordner, in dem sich all diese Dateien befinden
Kevin,

@ Kevin "Wenn in der Befehlszeile keine Dateinamen angegeben sind, werden Dateinamen über die Standardeingabe gelesen." Und da die Shell so bleibt, *NEWER*wie sie ist, wenn keine Erweiterungen gefunden werden, müssen Sie einen Fehler gemacht haben oder eine Shell verwenden, die einen nicht übereinstimmenden Platzhalter durch nichts ersetzt hat.
Muru

kopiert und eingefügt, in Ubuntu 14.10 Shell
Kevin
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.