GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Linux:Datei umbenennen, aber Erweiterung beibehalten?

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.


Linux
  1. Benennen Sie eine Datei im Linux-Terminal um

  2. 6 mv-Befehlsbeispiele zum Verschieben oder Umbenennen von Linux-Dateien und -Verzeichnissen

  3. Linux - Ersetzen von Leerzeichen in den Dateinamen

  4. Linux:Dateierweiterungen für mehrere Dateien entfernen

  5. Gibt es einen Linux-Befehl wie mv, aber mit Regex?

Linux Touch-Befehl

Cat-Befehl unter Linux

Linux-Dateibefehl

So benennen Sie eine Datei (en) in Linux um

So benennen Sie Dateien und Verzeichnisse in Linux um

Linux-Erweiterung zum Umbenennen mehrerer Dateien