2016-03-31 3 views
1

Ich müsste Tausende von Dateien umbenennen, gerade mache ich es mit dem Entfernen der ersten x Zeichen, aber es kann ein langwieriger Prozess seit der Anzahl der Zeichen sein musste entfernt werden Änderungen.So entfernen Sie ein gemeinsames Präfix-Muster aus mehreren Dateinamen in bash

Quelldateien werden wie folgt benannt:

4023 - 23 - Animal, crocodile 4 legs.txt 
243 - 4 - Animal, dog 4 legs.txt 
5450 - 2 - Animal, bird 2 legs.txt 

Umbenannt:

Animal, crocodile 4 legs.txt 
Animal, dog 4 legs.txt 
Animal, bird 2 legs.txt 

Es scheint die einfachste es alles zu trimmen sein würde, bevor „A“ erscheint, aber ich weiß nicht, wie man mach das. Etwas mit einer Schleife, die als Bash-Skript verwendet werden könnte, wäre großartig.

Antwort

1

können Sie bash parameter expansion

${VAR#*-*- }

verwenden, um ein Präfix von Muster zu entfernen. Das verwendet den Text in der Shell-Variablen VAR und erzeugt eine Zeichenfolge basierend auf dem Entfernen eines Präfixes, das dem Platzhaltermuster *-*- entspricht - z. alle Zeichen dann ein Strich dann alle Zeichen und dann ein zweiter Strich und ein Raum

Um die Dateinamen in einer Schleife zu bekommen kann man einfach ein Bash for mit einem Muster verwenden

for VAR in *.txt; do mv "$VAR" "${VAR#*-*- }"; done 

die Angabe ist notwendig, im mv die Leerzeichen in den Dateinamen zu verhindern, in mehrere Argumente von der Shell

+0

Vielen Dank, perfekt funktioniert. – Juicee

0

aufgeteilt werden können Sie cut -d"-" -f3 verwenden:

for VAR in *-*-*.txt; do mv "$VAR" "`echo $VAR | cut -d'-' -f3 `"; done 

oder den ersten Raum zu ignorieren:

for VAR in *-*-*.txt; do mv "$VAR" "`echo $VAR | sed -e 's/^.*- //g'`"; done 
Verwandte Themen