ubuntuusers.de

Umbenennen von Videos

Status: Gelöst | Ubuntu-Version: Kein Ubuntu
Antworten |

steganos

Anmeldungsdatum:
2. Mai 2016

Beiträge: 7

Hi, nach etlichen Stunden suchen und lesen muss ich doch um Hilfe bitten. Ich bekomme das kleine Script einfach nicht hin.

Ich habe mehrere Videos, welche ich anhand von Datumsinformationen aus dem Dateinamen umbenennen will. Da diese Videos erst später auf die Festplatte kommen, möchte ich unbedingt die Infos aus dem Dateinamen ziehen.

Hier sind 2 Beispiele, wie die Dateien aussehen und umbenannt werden sollen:

  1. VID-20160405-WA0002.mp4 → 2016-04-05_00-00-00-WA0002.mp4

  2. VID_20160327_125931.mp4 → 2016-03-27_12-59-31.mp4

Der Bisherige Code:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
source="/media/HDD/Fotos/"
todo="/media/HDD/Fotos todo/"

#Kopieren der neuen Bilder und Benennung nach Datum
find "$source" -name "*.[jJ][pP]*[gG]" -type f -not -name "20*-*-*_*-*-*.*" -exec bash -c "cp '{}' '$todo' | jhead -nf%Y-%m-%d_%H-%M-%S '{}'" \;
find "$todo" -name "*.[jJ][pP]*[gG]" -type f -not -name "20*-*-*_*-*-*.*" -exec bash -c "jhead -nf%Y-%m-%d_%H-%M-%S '{}'" \;

#Umbenennen der neuen Phone-Videos
#find "$source" -name "*.[mM][pP]*[4]" -type f -not -name "20*-*-*_*-*-*.*" -exec bash -c "???????"

#Umbenennen der neuen WA-Videos
#find "$source" -name "*.[mM][pP]*[4]" -type f -not -name "20*-*-*_*-*-*.*" -exec bash -c "???????"

Der Bereich mit den vielen ????????? fehlt mir noch und ich bekomme es einfach nicht hin. Bedenkt, dass der Dateiname komplett mit Verzeichnis übergeben wird und hier viele Unterordner existieren.

Danke vorab

Bearbeitet von rklm:

Aufzählung repariert. Bitte beachte Forum/Syntax.

track

Avatar von track

Anmeldungsdatum:
26. Juni 2008

Beiträge: 7174

Wohnort: Wolfen (S-A)

Hi steganos,

zuerst mal herzlich willkommen hier auf dem Forum !

Du erzählst etwas von Videos, und dann kommt ein Codeschnipsel, der sich um Fotos und JPGs kümmert ... das passt irgendwie nicht zusammen.

Grundsätzlich würde ich solche Umbenennungen in 2 Schritten machen:

  1. Die Dateien finden mit find -exec - so ähnlich wie Du es auch schon machst. Allerdings kann man das mit den Parametern noch etwas feintunen.

  2. Das eigentliche Umbenennen dann aber nicht zu Fuß, sondern mit Perl-rename. Das geht dann über Reguläre Ausdrücke.
    Dafür müsstest Du die möglichen Fälle allerdings nochmal genauer spezifizieren:

    1. Haben alle Dateien in jedem Fall das VID.... am Anfang ?

    2. Gibt es dann wirklich nur die 2 Möglichkeiten: entweder nur Datum ohne Uhrzeit, oder Datum mit Uhrzeit ?

LG,

track

steganos

(Themenstarter)

Anmeldungsdatum:
2. Mai 2016

Beiträge: 7

Hi, ich habe das ganze Script rein kopieren. Mir geht es hierbei nur noch um Zeile 9 und 12.

Es sind nur VID- und VID_ Dateien und es existieren auch nur diese beiden schon aufgelisteten Varianten. Einzig die Zahlen sind immer anders. Diese beiden unterschiedlichen Formate möchte ich auch über 2 Zeilen bearbeiten.

Ich habe jetzt etliche Stunden mit "sed" probiert, bin aber jetzt an meine grenzen gestoßen. Zum einen bei der Formatierung in das richtige Format und zum anderen dies im "rename" einzubinden.

track

Avatar von track

Anmeldungsdatum:
26. Juni 2008

Beiträge: 7174

Wohnort: Wolfen (S-A)

Wenn es bei Dir tatsächlich nur diese 2 Möglichkeiten gibt, dann sähe der Perl-Ausdruck für solche Umwandlung z.B, so aus:

track@track:~$ echo 'VID-20160405-WA0002.mp4
VID_20160327_125931.mp4'  |  perl -pe 's/VID[_-](\d{4})(\d\d)(\d\d)[_-](\d\d)(\d\d)(\d\d)/\1-\2-\3_\4-\5-\6/; s/VID[_-](\d{4})(\d\d)(\d\d)[_-]/\1-\2-\3_00-00-00-/'
2016-04-05_00-00-00-WA0002.mp4
2016-03-27_12-59-31.mp4 

Zuerst wandle ich das Datum_Zeit- Format um (1. Ersetzung), danach das nur Datum- Format (2. Ersetzung).
Wie gesagt, natürlich immer nur unter der Voraussetzung, dass es keine anderen Varianten im Format gibt.

LG,

track

Edit: Ein (\d\d) hatte ich vergessen. → nachgetragen.

steganos

(Themenstarter)

Anmeldungsdatum:
2. Mai 2016

Beiträge: 7

Dankeschön, erste Erfolge im Testverzeichnis sind da.

1
find "$source" -name "*.[mM][pP]*[4]" -type f -not -name "20*-*-*_*-*-*.*" -exec "rename 's/VID[_-](\d{4})(\d\d)(\d\d)[_-](\d\d)(\d\d)(\d\d)/\1-\2-\3_\4-\5-\6/; s/VID[_-](\d{4})(\d\d)(\d\d)[_-]/\1-\2-\3_00-00-00-/' '{}'" \;

//EDIT

Leider nicht, irgendwie haut das noch nicht hin

steganos

(Themenstarter)

Anmeldungsdatum:
2. Mai 2016

Beiträge: 7

Jetzt funktioniert es, aber mit Meldungen.

1
find "$source" -name "*.[mM][pP]*[4]" -type f -not -name "20*-*-*_*-*-*.*" -exec bash -c "rename 's/VID[_-](\d{4})(\d\d)(\d\d)[_-](\d\d)(\d\d)(\d\d)/\1-\2-\3_\4-\5-\6/; s/VID[_-](\d{4})(\d\d)(\d\d)[_-]/\1-\2-\3_00-00-00-/' '{}'" \;

Das sind die Meldungen

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
\2 better written as $2 at (eval 1) line 1.
\3 better written as $3 at (eval 1) line 1.
\1 better written as $1 at (eval 1) line 1.
\2 better written as $2 at (eval 1) line 1.
\3 better written as $3 at (eval 1) line 1.
\4 better written as $4 at (eval 1) line 1.
\5 better written as $5 at (eval 1) line 1.
\6 better written as $6 at (eval 1) line 1.
\1 better written as $1 at (eval 1) line 1.
\2 better written as $2 at (eval 1) line 1.
\3 better written as $3 at (eval 1) line 1.

Das umbenennen funktioniert aber.

steganos

(Themenstarter)

Anmeldungsdatum:
2. Mai 2016

Beiträge: 7

Hab die $ und entsprechenden "" eingefügt. Jetzt funktioniert alles ohne Meldungen.

Besten Dank für die Hilfe.

track

Avatar von track

Anmeldungsdatum:
26. Juni 2008

Beiträge: 7174

Wohnort: Wolfen (S-A)

Wofür die bash- Untershell ? - es geht doch genauso gut, wenn Du direkt rename ausführst !

Und außerdem hatte ich Dir ja den Tip gegeben, dass man bei find noch etwas vereifachen kann. Guckstu in man find : mit der Option "-iname" wird das

1
find "$source" -iname 'VID*.mp4' -type f -exec rename 's/VID[_-](\d{4})(\d\d)(\d\d)[_-](\d\d)(\d\d)(\d\d)/$1-$2-$3_$4-$5-$6/; s/VID[_-](\d{4})(\d\d)(\d\d)[_-]/$1-$2-$3_00-00-00-/' {} \;

LG,

track

Antworten |