Wie benenne ich mehrere Dateien mit ihren ersten 10 Zeichen um?

7

Ich habe ein Problem beim Umbenennen mehrerer Dateien, indem der Name durch die ersten 10 Zeichen des alten Namens ersetzt wird. Ich habe versucht, die Lösung im Internet zu finden, aber ich habe keine Antworten gefunden.

Beispiel:

Ursprüngliche Dateinamen:

1208605001abAcd.jpg 
1201230111FbcAdee.jpg 
11512345714x611aaa.jpg 

Was ich erreichen möchte:

1208605001.jpg 
1201230111.jpg 
1151234571.jpg
surya_darmana
quelle

Antworten:

16

Du kannst es versuchen:

rename -n 's/(.{10}).*(\.jpg)$/$1$2/' *.jpg

Beispiel:

$ rename -n 's/(.{10}).*(\.jpg)$/$1$2/' *.jpg
11512345714x611aaa.jpg -> 1151234571.jpg
1201230111FbcAdee.jpg -> 1201230111.jpg
1208605001abAcd.jpg -> 1208605001.jpg

Die -nOption simuliert nur den Befehl, damit Sie die Änderungen überprüfen können. Führen Sie es ohne aus, um die Änderungen tatsächlich vorzunehmen.

Die Regex (.{10}).*(\.jpg)besteht aus:

  • .{10}- 10 beliebige Zeichen in einer Gruppe (…), gefolgt von
  • .* - eine beliebige Anzahl von Zeichen, gefolgt von
  • \.jpg$- die Erweiterung am Ende ( $) des Dateinamens in der zweiten Gruppe

Der Ersatz $1$2ist nur die erste Gruppe, gefolgt von der zweiten.

muru
quelle
Es tut mir leid, wenn mir etwas fehlt. Als ich versuchte, Ihren vorgeschlagenen Befehl auszuführen, wurde folgende Meldung angezeigt: "Substitutionsersetzung nicht in (eval 1) Zeile 1 beendet." Habe ich etwas falsch gemacht?
surya_darmana
@surya_darmana es sollte ein /nachher geben $2. Die Beispielausgabe hat es richtig. Ich habe es repariert.
Muru
Vielen Dank, der Befehl ist perfekt ausgeführt, Sie haben meinen Tag gemacht: D
surya_darmana
1
Dies gilt für das rename , was mit perl(z. B. unter Ubuntu) geliefert wird, nicht für das , was mit (z. util-linuxB. unter Fedora, CentOS, Cygwin) geliefert wird.
Reinier Post
4

Sie können nur mit Bash tun:

for FILE in *.jpg ; do mv "${FILE}" "${FILE:0:10}.jpg" ; done

Mit ein wenig Arbeit können Sie die Dateierweiterung erhalten und den neuen Namen automatisch hinzufügen.

Antonio
quelle
4
Verwenden Sie *stattdessen globbing ( ) ls(für das Sie das -1sowieso nicht benötigen würden) und zitieren Sie die Variablen. ( "${FILE:0:10}.jpg").
Kevin
Ich benutze lieber ls, aber +1 für das Zitat! (Ablenkungsfehler).
Antonio
Es ist keine Frage der Präferenz, lsDateien mit Leerzeichen im Namen zu verwenden. Globbing wird nicht.
Kevin
Großartig, @ Kevin! Ich habe nie an IFS gedacht. Ich bin "alt", benenne meine Dateien noch mit Unterstrich anstelle von Leerzeichen. :-) Ich werde meine Antwort bearbeiten.
Antonio
2

Wenn Sie verwenden zsh:

zmv '(*).(*)' '${1:0:10}.$2'

Wenn dies noch nicht geschehen ist, müssen Sie möglicherweise zuerst Folgendes ausführen:

autoload zmv
Kevin
quelle
Wird dies die Erweiterungen behalten?
Muru
@muru nein, ich habe diese spezielle Anforderung nicht bemerkt. Aktualisiert mit einer Version, die dies tut.
Kevin
0

Wenn Sie eine GUI-Version wünschen, schauen Sie sich pyRenamer an, ein leistungsstarkes Tool zum Umbenennen von Massen.

Logo für pyRenamer

pyRenamer hat zwei große Vorteile. Zum einen können Sie ein "Was wäre wenn" ausführen, dh sehen, was passieren würde, bevor Sie sich zur Änderung verpflichten.

Der andere Vorteil wird in seiner Beschreibung gut erklärt:

Sie können Dateien mithilfe von Mustern umbenennen, suchen und ersetzen, ersetzen, Text einfügen oder löschen oder Dateien sogar manuell umbenennen.

Sie können Bilder auch mithilfe ihrer EXIF-Tags und Musik mithilfe ihrer internen Tags umbenennen.

Verwenden Sie zur Installation das Ubuntu Software Center oder Ihr bevorzugtes Software-Installationsprogramm oder geben Sie über die Befehlszeile den folgenden Befehl ein:

sudo apt install pyrenamer
Paddy Landau
quelle