Hier ist eine Antwort auf die Bonusfrage.
Ich möchte eigentlich das Erstellungsdatum eines Fotos in seinen Dateinamen einfügen, um so etwas wie 20091231 2359 NewYear.jpg zu erhalten. Ich fürchte, ich brauche eine nicht triviale Kombination von Befehlen, um das zu erreichen?
Angenommen, Sie möchten das Erstellungsdatum des Fotos aus den EXIF-Daten übernehmen, benötigen Sie dafür ein separates Tool. Zum Glück stellt sich heraus, dass jhead
bietet mit -n
eine triviale Möglichkeit, genau das zu tun, was Sie wollen Möglichkeit.
$ jhead -h
[...]
-n[format-string]
Rename files according to date. Uses exif date if present, file
date otherwise. If the optional format-string is not supplied,
the format is mmdd-hhmmss. If a format-string is given, it is
is passed to the 'strftime' function for formatting
In addition to strftime format codes:
'%f' as part of the string will include the original file name
[...]
Hier ist ein Beispiel:
$ jhead -n%Y-%m-%d-%f New_year.jpg
New_year.jpg --> 2009-12-31-New_year.jpg
Bearbeiten :Um dies für eine Reihe von Fotos zu tun, wäre es natürlich so etwas wie:
$ for i in *jpg; do jhead -n%Y-%m-%d-%f $i; done
Um die Datumsformatierung nach Ihren Wünschen anzupassen, werfen Sie einen Blick auf die Ausgabe von date --help
, zum Beispiel; es listet die verfügbaren Formatcodes auf.
(jhead ist für verschiedene Systeme weit verbreitet. Wenn Sie z. B. Ubuntu oder Debian verwenden, geben Sie einfach sudo apt-get install jhead
ein um es zu installieren.)
Nur für den Umbenennungsteil funktioniert das Programm "Umbenennen". Es ist dasselbe wie das Beispiel, das Sie in der Manpage gesehen haben, nur umgedreht.
[email protected]:/tmp/q$ touch myfile.{a,b,c,d}
[email protected]:/tmp/q$ ls
myfile.a myfile.b myfile.c myfile.d
[email protected]:/tmp/q$ rename -v s/myfile/yourfile/ myfile.*
myfile.a renamed as yourfile.a
myfile.b renamed as yourfile.b
myfile.c renamed as yourfile.c
myfile.d renamed as yourfile.d
[email protected]:/tmp/q$ ls
yourfile.a yourfile.b yourfile.c yourfile.d
[email protected]:/tmp/q$
betelgeuse:tmp james$ ls myfile.* yourfile.*
ls: yourfile.*: No such file or directory
myfile.a myfile.b
betelgeuse:tmp james$ for file
> in myfile.*
> do
> mv "${file}" "`echo $file | sed 's/myfile\./yourfile./'`"
> done
betelgeuse:tmp james$ ls myfile.* yourfile.*
ls: myfile.*: No such file or directory
yourfile.a yourfile.b
Der Schlüssel ist, dass, wenn Sie ein Beispiel gesehen haben, das zeigt, wie man einen Teil des Dateinamens mit einer Regex mischt, dies das einzige Beispiel ist, das Sie brauchen. Erweiterungen haben auf Unix-Dateisystemen keinen besonderen Status - sie sind nur ein Teil des Dateinamens, der zufällig hinter einem .
steht Zeichen.