Wie benenne ich mehrere Dateien um, indem ich die Erweiterung entferne?

13

Ich habe eine Reihe von Tiff-Dateien mit dem Namen:

sw.001.tif
sw.002.tif
...

und ich möchte die .tifam ende jeder datei entfernen . Wie kann ich den renameBefehl verwenden, um dies zu tun?

Paul
quelle
2
Bedenken Sie, dass KEIN Linux- oder Unix-Dateisystem "Erweiterungen" im Windows- oder VMS-Stil verwendet - ein Suffix des Dateinamens lautet nur gemäß der Konvention ".tif" oder ".c" oder ".o" oder ".so" " oder Wasauchimmer.
Bruce Ediger
Das ist in Ordnung ... Ich importiere Dateien von Windows nach Linux :)
Paul
1
Technisch gesehen verwendet Windows auch keine Dateierweiterungen. Der Dateimanager von Windows 95 verwendet lediglich die letzten Zeichen des Dateinamens, um den Dateityp zu bestimmen, nachdem das MS-DOS-Benennungsschema verlassen wurde. Die Konvention ist seitdem geblieben.
RAKK,

Antworten:

23

perl's rename(wie es normalerweise unter Debian zu finden ist, wo es auch genannt wird prename) oder dieses Derivat ( renamePaket unter Debian):

rename 's/\.tif$//' *.tif

util-linux rename(wie in der Regel unter Red Hat und rename.ulDebian zu finden):

rename -- .tif '' *.tif

(beachten Sie , dass man würde umbenennen blah.tiffany.tifzu blahfany.tif)

Ignacio Vazquez-Abrams
quelle
2
Ich glaube, die "Debian" -Umbenennung stammt von Larry Wall (kommt mit Perl?) Und "Red Hat" von util-linux (rename.ul in Debian IIRC).
XTL
@XTL: Richtig. Ich nenne sie einfach so, weil sie die "Umbenennungs" -Programme sind, die in Debian- oder Red Hat-Derivaten zu finden sind.
Ignacio Vazquez-Abrams
Vielen Dank! Ich habe nie bemerkt, dass es verschiedene Versionen von 'Rename' gibt. Ich nehme an, dass es andere subtile Unterschiede zwischen den Befehlen in debian & redhat gibt. Ich werde einige ihrer Unterschiede nachschlagen müssen.
Paul
6

Bei einem Nicht-Umbenennen können Sie Folgendes tun:

$ for i in *.tif; do mv -i $i `basename $i .tif`; done

(-i warnt vor dem Ersetzen einer Datei)

XTL
quelle
15
Sicherere, schnellere Version:for i in ./*.tif; do mv -i "$i" "${i%.tif}"; done
jw013
+1 zum letzten Kommentar hier. Bei Dateinamen mit Leerzeichen ist es sicherer.
Petobens
@ jw013 Dein Kommentar sollte eine Antwort auf höchster Ebene sein.
Roland
1
rename -- .oldext .newext *.oldext

Dadurch wird die alte durch die neue Erweiterung ersetzt. Um die Erweiterung einfach zu entfernen, können Sie explizit eine leere Zeichenfolge als Argument übergeben.

rename -- .gz.tmp  '' *.gz.tmp

Mit dem obigen Befehl werden alle Dateien mit der .gz.tmpErweiterung im aktuellen Ordner in umbenannt filename.gz.

Weitere Informationen finden Sie im Artikel: Linux: Entfernen Sie Dateierweiterungen für mehrere Dateien .

Manpreet Singh
quelle
Dies setzt voraus, dass die util-linux-Implementierung renamemit dem traditionellen renameBefehl von inkompatibel (und viel eingeschränkter) ist perl.
Stéphane Chazelas
Beachten Sie auch, dass es das erste Vorkommen .oldextinnerhalb des Dateinamens ersetzt, nicht unbedingt die Erweiterung ( foo.oldextasy.oldextwürde in umbenannt werden footasy.oldext).
Stéphane Chazelas
1

Wenn Sie IBM AIX verwenden, steht Ihnen kein renameBefehl zur Verfügung. Daher müssen Sie zum Batch-Entfernen von Dateierweiterungen einfache Vanilla System V UNIX-Befehle verwenden:

for file in *.tif; do
   mv $file `echo $file | sed 's/.tif$//'`;
done;
RAKK
quelle
-2

können wir dies rekursiv machen

for i in *.gz; do mv -i $i `basename $i .gz`; done
user3361573
quelle