2017-06-21 1 views
0

Ich möchte die Dateinamen von einem Terminal ändern. Ich habe viele Dateien, also kann ich nicht alle einzeln ändern.Ändern des Namens vieler Dateien durch Erhöhung der Nummer

a20170606_1257.txt -> a20170606_1300.txt 
a20170606_1258.txt -> a20170606_1301.txt 

Ich bin nur in der Lage es durch zu ändern:

rename 57.txt 00.txt *57.txt 

aber es ist nicht genug.

+0

was bedeutet, dass '1257'' 1300' und '1258'' 1301' sind? – Inian

+0

Ja, ich möchte es auf diese Weise ändern. – raquela

+0

Sie möchten den Namen ändern oder den Wert der Nummer erhöhen –

Antwort

1

spielen nur mit dem Parameter Erweiterung der längsten und kürzesten Saiten vom Typ ${str##*} und ${str%%*}

offset=43 
for file in *.txt; do 
    [ -f "$file" ] || continue 
    woe="${file%%.*}"; ext="${file##*.}" 
    num="${woe##*_}" 
    echo "$file" "${woe%%_*}_$((num+offset)).${ext}" 
done 

Sobald Sie es arbeiten, haben zu extrahieren, entfernen Sie die echo Linie und ersetzen sie durch mv -v. Ändern Sie die Variable offset wie gewünscht, abhängig davon, wo Sie die umbenannten Dateien starten möchten.

1

Perl e flag

rename -n -v 's/(?<=_)(\d+)/$1+43/e' *.txt 

Test

dir $ ls | cat -n 
    1 a20170606_1257.txt 
    2 a20170606_1258.txt 
dir $ 
dir $ 
dir $ rename -n -v 's/(?<=_)(\d+)/$1+43/e' *.txt 
rename(a20170606_1257.txt, a20170606_1300.txt) 
rename(a20170606_1258.txt, a20170606_1301.txt) 
dir $ 
dir $ rename -v 's/(?<=_)(\d+)/$1+43/e' *.txt 
a20170606_1257.txt renamed as a20170606_1300.txt 
a20170606_1258.txt renamed as a20170606_1301.txt 
dir $ 
dir $ ls | cat -n 
    1 a20170606_1300.txt 
    2 a20170606_1301.txt 
dir $ 

rename_with_e_flag


zu retten 0
+0

Es funktioniert nicht. Ich habe umbenannt: ungültige Option - 'n'. – raquela

+0

versuchen Sie 'rename --help' und sehen Sie, ob es' -n' Option hat, sollte es haben. –

+0

Ich habe nur v, s, h, V. – raquela

Verwandte Themen