Benennen Sie die letzten 8 Zeichen im Dateinamen um

Benennen Sie die letzten 8 Zeichen im Dateinamen um

Ich erhalte Videodateien mit unterschiedlichen Namen, aber die letzten 8 Zeichen sind Zahlen (auch jedes Mal anders). Dies ist das Muster des Dateinamens:

custom text 00030402.avi

Ich muss dafür sorgen, dass der Dateiname folgendermaßen aussieht:

00\:03\:04\:02

Meine Frage ist also, wie ich die letzten 8 Zeichen umbenennen und beibehalten kann, um dieses Muster zu erreichen.

Antwort1

Verwenden von rename(das von ), das perlmanchmal auch prename, nicht von genannt wird util-linux):

rename 's/(\d{2})(\d{2})(\d{2})(\d{2})/$1:$2:$3:$4/'  *.avi

custom text 00030402.aviDadurch würde ein Dateiname beispielsweise in umbenannt custom text 00:03:04:02.avi.

Wenn Sie Backslashes im Dateinamen (vor dem :) haben, sagen Sie:

rename 's/(\d{2})(\d{2})(\d{2})(\d{2})/$1\\:$2\\:$3\\:$4/' *.avi

Um den benutzerdefinierten Text aus den Dateinamen zu entfernen, sagen Sie:

rename 's/.* (\d{2})(\d{2})(\d{2})(\d{2})(.*)/$1\\:$2\\:$3\\:$4$5/' *.avi

Antwort2

Mit zsh:

$ autoload zmv
$ zmv -v '(*)(??)(??)(??).avi' '$1\:$2\:$3\:$4.avi'
mv -- custom\ text\ 00030402.avi custom\ text\ 00\\:03\\:04\\:02.avi

(-v für ausführlich). Zum Entfernen derbenutzerdefinierter Text:

$ zmv -v '*(??)(??)(??)(??).avi' '$1\:$2\:$3\:$4.avi'
mv -- custom\ text\ 00030402.avi 00\\:03\\:04\\:02.avi

Antwort3

So geht das mit der Perl-Regex-Lookahead-Funktion:

perl -e '
    while($name=shift){
        @components = split /(?=(?:[0-9]{2})+[^0-9]+$)/,$name;
        shift @components;
        $new_name = join '\:',@components;
        rename $name => $new_name;
    }
' list_of_avi_files

Dies funktioniert für jede beliebige Anzahl Ziffernpaare, nicht nur für 4. Sie können es beispielsweise auch {2}in ändern {3}und in Zifferndreiergruppen aufteilen.

verwandte Informationen