2013-06-19 9 views
6

Ich habe viele Dateien wie diese:Umbenennen von Dateien mit Hinzufügen einer Nummer in bash filename

13831_1.jpg 
13838_1.jpg 
138035_1.jpg 
138037_1.jpg 
138039_1.jpg 

Ich brauche einen Wert von 5000000 auf die Zahlen der Dateinamen hinzuzufügen. Das Ergebnis sollte die folgende sein:

5013831_1.jpg 
5013838_1.jpg 
5138035_1.jpg 
5138037_1.jpg 
5138039_1.jpg 

Gibt es eine Möglichkeit, es mit bash zu tun oder Perl?

Antwort

7

Do: rename -v. Wenn es ausgegeben wird:

Diese Überprüfung ist, weil es mindestens zwei verschiedene Umbenennungswerkzeuge mit sehr unterschiedlichen Funktionen gibt. Und die Lösung, die ich habe, muss umbenannt werden, die perlexpr behandelt.

Dann können Sie:

rename 's/^(\d+)/5000000+$1/e' *.jpg 
+0

Ich wollte versuchen, diese (wie genial klingt), aber ich scheine nicht zu habe in cygwin "umbenennen". Du weißt, ob/wie ich es bekommen könnte? –

+2

@SvendHansen, es ist eigentlich ein [Perl-Skript] (http://stackoverflow.org/wiki/Rename.pl). – doubleDown

+0

Ich habe eine Suche im Internet durchgeführt, und es scheint nicht für Cygwin verfügbar zu sein. Wenn Sie das Paket 'util-linux' installieren, erhalten Sie einen' rename' Befehl, aber dieser funktioniert eher wie 'mv' und scheint keine regulären Ausdrücke zu unterstützen (oder wenn es nicht in diesem Format ist). Es gibt einige 3rd Party/Home geschrieben Skripte da draußen, um die Funktionalität zu bieten, obwohl (wie diese: http://nylinuxhelp.com/blogs/command-line/cygwin-rename-command-help) –

4

Eine Möglichkeit, dies nur bash

for file in *.jpg; do 
    number=${file%_*} 
    therest=${file#$number} 
    mv "$file" "$((number+5000000))$therest" 
done 

Notizen mit zu tun:

  • *.jpg wird in aktuellen Verzeichnis auf eine Liste von .jpg Dateien erweitern (Ref: Filename expansion).
  • ${file%_*} entfernt alles nach _ im Dateinamen und gibt es zurück. (ref:)
  • ${file#$number} entfernt den Inhalt der Variablen number vom Anfang des Dateinamens und gibt es zurück. (Ref: Shell parameter expansion)
  • $((number+5000000)) wertet den arithmetischen Ausdruck innen und gibt das Ergebnis (ref: Arithmetic expansion)
-2
$filename  = "13831_1.jpg"; 
$org   = explode("_".$filename); 
$addnumber  = 5000000+$org[0]; 
$string  = implode("_",$addnumber); 
+0

In welcher Sprache ist es? Es ist definitiv keine Bash. –

+0

sieht wie [php] aus (http://php.net/manual/en/function.implode.php) – doubleDown