2017-05-10 2 views
-1

Ich habe eine Reihe von Dateien, die von "mv --backup = t Quellziel" kopiert werden. So sind diese Dateien im Format *.*.~[0-9]~ Zum BeispielBenennen Sie eine Datei um Swap-Erweiterungen in Unix

some_file_name.pdf.~1~ 
some_file_name.pdf.~2~ 
another_file_name.docx.~1~ 
another_file_name.docx.~2~ 

Nun würde Ich mag alle diese Dateien umbenennen, so dass die Backup-Nebenstellennummer kam vor der eigentlichen Erweiterung. Wie

some_file_name_1.pdf 
some_file_name_2.pdf 
another_file_name_1.docx 
another_file_name_2.docx 

Gibt es eine Möglichkeit, in Unix mit Shell zu tun? Irgendwelche Gedanken würden geschätzt werden. Vielen Dank im Voraus.

+2

Anscheinend (Kommentare zu Antworten) die Beispieldateinamen sind von den tatsächlichen Dateien unterschiedlich. Bitte aktualisieren Sie die Frage, um die Realität widerzuspiegeln. –

+0

Hey @JamesBrown: Könnten Sie bitte das Update vorschlagen? Ich habe dich nicht verstanden. – user3078630

+0

'CR_71050_5.3.17.pdf. ~ 1 ~' ist nicht 'some_file_name_1.pdf', da Sie es durch die Perioden aufteilen müssen. –

Antwort

1

Mit BASH regex Richtlinien können Sie dies tun:

for f in *~; do 
    [[ $f =~ ^(.+)\.([^.]+)\.~([0-9]+)~$ ]] && 
    echo mv "$f" "${BASH_REMATCH[1]}_${BASH_REMATCH[3]}.${BASH_REMATCH[2]}" 
done 

Ausgang:

mv CR_71050_5.3.17.pdf.~1~ CR_71050_5.3.17_1.pdf 
mv another_file_name.docx.~1~ another_file_name_1.docx 
mv another_file_name.docx.~2~ another_file_name_2.docx 
mv some_file_name.pdf.~1~ some_file_name_1.pdf 
mv some_file_name.pdf.~2~ some_file_name_2.pdf 

Wenn Sie zufrieden sind, können Sie echo entfernen, bevor mv

+0

Scheint, es würde funktionieren. Lass mich das versuchen. – user3078630

+0

Dies funktioniert nicht für diese Datei 'CR_71050_5.3.17.pdf. ~ 1 ~' – user3078630

+0

Überprüfen Sie meine aktualisierte Antwort jetzt. – anubhava

0

Versuchen:

awk -F~ '{ split($1,splt,".");system("mv "$0" "splt[1]"_"$2"."splt[2]) }' 

Wir sind im Wesentlichen die Dateinamen auf ~ Aufspalten und dann mit awks Funktion geteilt den Text weiter spalten und dann auf die Systemfunktion übergeben sie den mv Befehl auszuführen.

0

Sie verwenden können umbenennen (es ist als Debian-Paket verfügbar).

$ ls 
file.pdf.~1~ file.pdf.~10~ file.pdf.~2~ file.pdf.~3~ file.pdf.~9~ 

$ rename 's/.pdf.~([0-9]+)~$/$1.pdf/' *.pdf.~*~ 
$ ls 
file10.pdf file1.pdf file2.pdf file3.pdf file9.pdf 
Verwandte Themen