Entfernen Sie Präfixe aus Dateinamen

9

Ich habe eine Reihe von Dateien wie folgt:

04602635_b0294.DAT20120807164534
04602637_b0297.DAT20120807164713
04602638_b0296.DAT20120807164637
04602639_b0299.DAT20120807164819
04602640_b0298.DAT20120807164748
04602641_b0300.DAT20120807164849
04602650_b0301.DAT20120807164921
04602652_b0302.DAT20120807164956

Ich muss sie umbenennen, um das Präfix auszuschließen. Es muss so aussehen ..

b0294.DAT20120807164534
b0297.DAT20120807164713
b0296.DAT20120807164637
b0299.DAT20120807164819
b0298.DAT20120807164748
b0300.DAT20120807164849
b0301.DAT20120807164921
b0302.DAT20120807164956

BEARBEITEN

Ich habe vergessen hinzuzufügen, dass ich Solaris verwende.

Pieter van Niekerk
quelle

Antworten:

18
for file in * ; do
    echo mv -v "$file" "${file#*_}"
done

Führen Sie dies aus, um sicherzustellen, dass alles in Ordnung ist.
Wenn dies der echoFall ist, entfernen Sie es aus dem Befehl und die Dateien werden nach Ihren Wünschen umbenannt.

"${file#*_}"

ist eine übliche Substitutionsfunktion in der Shell. Es entfernt alle Zeichen vor dem ersten _Symbol (einschließlich des Symbols selbst). Weitere Details finden Sie hier .

eilen
quelle
Könnten Sie bitte erklären, was genau passiert "${file#*_}"?
Pieter van Niekerk
Ich habe meiner Antwort eine Erklärung hinzugefügt.
Eile
IMO sollten fast alle Skripte so geschrieben werden, dass sie die gewünschte Befehlsausgabe wiedergeben. Aber entfernen Sie dann nicht die echo, sondern leiten Sie die Skriptausgabe in bash.
Jim L.
7

Sie können das Tool renamedafür verwenden:

rename "s/.*_//" *

Wenn Sie anhängen -n, wird nichts umbenannt und nur angezeigt, was ohne getan worden wäre -n.

Als Antwort auf Rushs Kommentar: Mein renameis ist eigentlich ein Link zu prenameDebians und Ubuntus perlPaket.

scai
quelle
5
Beachten Sie, dass renamedies auf verschiedenen Systemen nicht immer gleich ist und die Syntax manchmal unterschiedlich sein kann.
Eile
1
Der Fragesteller hat jetzt hinzugefügt, dass er Solaris verwendet. Daher steht ihm dieser Umbenennungsbefehl (der für Debian und Derivate spezifisch ist) nicht zur Verfügung.
Gilles 'SO - hör auf böse zu sein'
1
... es sei denn, er schafft es, es aus der Quelle zu bauen.
sendmoreinfo
@ Gilles perl-renameist überhaupt nicht spezifisch für Debian. Es heißt einfach nicht renameaber perl-renameoder prenamein anderen Distributionen. Es sollte jedoch immer in den Repos sein und eines wird auch mit Perl installiert .
Terdon
@terdon Ein Befehl zum Umbenennen von Dateien, deren grundlegende Verwendung ein Perl-Ausdruck ist, ist nicht spezifisch für Debian. Ein solcher Befehl, der aufgerufen wird renameund wahrscheinlich installiert wird, ohne explizit ein Paket anzufordern, das nicht nur aufgerufen wirdrename , ist spezifisch für Debian. Andere Linux-Distributionen rufen den Befehl auf prenameoder perl-renamevermeiden Verwechslungen mit dem util-linux renameund bündeln ihn nicht mit dem Perl-Paket. Mir ist kein Nicht-Linux-Unix bekannt, das es unter dem Namen renameoder in a versendet Standardinstallation unter einem beliebigen Namen.
Gilles 'SO - hör auf böse zu sein'