GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Wie entferne ich nachgestellte Zeichen in Dateinamen in Bash?

In der Shell könnte man einfach Folgendes tun:

for x in *]*.avi ; do 
    mv -i "$x" "${x%]*.avi}.avi"
done

Die Shell kann eine Liste der Dateinamen mit nur einem normalen Glob und ${var%pattern} erzeugen entfernt das (kürzeste) passende Muster am Ende der Zeichenfolge in der Variablen var . Da die Enderweiterung immer .avi ist , ich habe es einfach mit dem Muster entfernt und wieder hinzugefügt. Mit den Anführungszeichen sollte dies auch mit Dateinamen funktionieren, die Leerzeichen enthalten, wie Fancy Name for a Show.s01e01]Asdf.avi


Dadurch werden die Dateien umbenannt. Sie benötigen das \w*, um eine beliebige Anzahl alphanumerischer Zeichen zu kennzeichnen.

rename 's/\]\w*//' *

Referenz:http://www.troubleshooters.com/codecorn/littperl/perlreg.htm#UsingSimpleWildcards


Das ist alles andere als unpraktisch - die anderen Antworten sind viel schneller und kürzer - aber ...

Sie können PowerShell verwenden! Microsoft hat es kürzlich Open-Source gemacht und es plattformübergreifend gemacht. Downloads und Installationsanweisungen für Ihr Betriebssystem finden Sie im Abschnitt „Get PowerShell“.

Sobald Sie es installiert haben, können Sie dieses kurze Skript verwenden:

Get-ChildItem -File '*]*.avi' | ForEach-Object {
    Rename-Item $_ -NewName (($_.Name -Split ']')[0] + '.avi')
}

Grundsätzlich geht es durch jedes Objekt im aktuellen Verzeichnis, das eine Datei ist, die *]*.avi entspricht , erhält den Teil vor der Klammer, heftet .avi an wieder darauf und weist ihm diesen als neuen Namen zu.

Um es direkt von Bash aus auszuführen, verwenden Sie diesen semi-golfed Einzeiler:

powershell -command $'gci -File \'*]*.avi\'|%{rename-item $_ -NewName (($_.Name -Split \']\')[0]+\'.avi\')}'

Zitieren Sie mit freundlicher Genehmigung dieser Stack Overflow-Antwort.

(Getestet in Bash unter Ubuntu unter Windows. Es gibt wahrscheinlich einen viel kürzeren Weg, dies mit PowerShell zu tun, aber ich wollte etwas zeigen, das für Leute verständlich ist, die keine regulären Ausdrücke kennen.)


Linux
  1. Wie ändere ich einen Dateinamen, der Zeichen enthält?

  2. Wie erkennt man Bash>=4.0?

  3. Wie konvertiert man .. in Pfadnamen in absolute Namen in einem Bash-Skript?

  4. So entfernen Sie Ordner mit einem bestimmten Namen

  5. Wie kann ich die Anzahl der Zeichen in einer Bash-Variablen zählen?

Wie schreibe ich eine Schleife in Bash?

So kommentieren Sie in Bash

So entfernen Sie (^M) Zeichen aus einer Datei in Linux

So entfernen Sie Leerzeichen aus Dateinamen in Linux

So entfernen Sie alle Leerzeichen aus einer Textdatei

So führen Sie ein Bash-Skript aus