2016-11-23 5 views
-2

Ich habe Dateinamen (aus Bildkacheln) bestehend aus zwei Zahlen durch einen Unterstrich, z.Führende Nullen zweimal im Dateinamen hinzufügen

142_27.jpg 
7_39.jpg 
1_120.jpg 

Wie kann ich (in linux) führende Nullen zu diesen beiden Zahlen hinzufügen? Was ich will, ist die Dateinamen als

142_027.jpg 
007_039.jpg 
001_120.jpg 
+0

'perldoc -f sprintf' – toolic

+0

Sie suchen Dateien umzubenennen oder Text in einer Datei zu ändern? – Sundeep

+0

Benennen Sie Dateien um. Ich habe viele Beispiele für das Hinzufügen von Nullen zum Anfang eines Dateinamens gefunden, aber hier möchte ich Nullen an zwei Stellen (am Anfang und nach dem Unterstrich). – user1583209

Antwort

1

Mit perl basiert rename Befehl

$ touch 142_27.jpg 7_39.jpg 1_120.jpg 
$ rename -n 's/\d+/sprintf "%03d", $&/ge' *.jpg 
rename(1_120.jpg, 001_120.jpg) 
rename(142_27.jpg, 142_027.jpg) 
rename(7_39.jpg, 007_039.jpg) 

Die -n Option ist für Trockenlauf, entfernen Sie sie für die tatsächliche Umbenennung


Wenn perl Basis rename Befehl nicht verfügbar ist:

$ for f in *.jpg; do echo mv "$f" "$(echo "$f" | perl -pe 's/\d+/sprintf "%03d", $&/ge')"; done 
mv 1_120.jpg 001_120.jpg 
mv 142_27.jpg 142_027.jpg 
mv 7_39.jpg 007_039.jpg 

Ändern echo mv nur mv einmal trocken laufen scheint in Ordnung

2

Sie einen einzelnen awk Befehl Format Dateinamen mit führenden Nullen verwendet werden kann mit einem printf:

for f in *.jpg; do 
    echo mv "$f" $(awk -F '[_.]' '{printf "%03d_%03d.%s", $1, $2, $3}' <<< "$f") 
done 

erhalten Sie folgende Ausgabe:

mv 142_27.jpg 142_027.jpg 
mv 1_120.jpg 001_120.jpg 
mv 7_39.jpg 007_039.jpg 

Sobald Sie mit der Ausgabe zufrieden sind, entfernen Sie echo vor mv Befehl.

0

Sie können es mit ein wenig Shell-Skript mit sed:

for i in *.jpg; 
do 
    new=`echo "$i" | sed -n -e '{ s/^\([0-9]\{0,3\}\)_\([0-9]\{0,3\}\).jpg/000\1_000\2.jpg/ }; 
    {s/\([0-9]*\)\([0-9]\{3\}\)_\([0-9]*\)\([0-9]\{3\}\).jpg/\2_\4.jpg/p };'`; 
    mv "$i" "$new"; 
done; 

ich anfügen ersten drei führende Nullen an den genannten Stellen durch Ausfall- und danach abgeschnitten als viele Ziffern wie nötig beim Start an den genannten Stellen, so dass nur noch 3 Ziffern übrig sind

Verwandte Themen