Ecco una risposta alla domanda bonus.
In realtà voglio inserire la data di creazione di una foto nel suo nome file, per ottenere qualcosa come 20091231 2359 NewYear.jpg. Temo di aver bisogno di una combinazione non banale di comandi per riuscirci?
Supponendo che tu voglia prendere la data di creazione della foto dai dati EXIF, avrai bisogno di uno strumento separato per questo. Fortunatamente risulta che jhead
offre un modo banale per fare esattamente quello che vuoi, con il suo -n
opzione.
$ 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
[...]
Ecco un esempio:
$ jhead -n%Y-%m-%d-%f New_year.jpg
New_year.jpg --> 2009-12-31-New_year.jpg
Modifica :Ovviamente, per fare questo per un gruppo di foto, sarebbe qualcosa del tipo:
$ for i in *jpg; do jhead -n%Y-%m-%d-%f $i; done
Per modificare la formattazione della data a tuo piacimento, dai un'occhiata all'output di date --help
, Per esempio; elencherà i codici formato disponibili.
(jhead è ampiamente disponibile per diversi sistemi. Se sei ad esempio su Ubuntu o Debian, digita semplicemente sudo apt-get install jhead
per installarlo.)
Solo per la parte di ridenominazione, il programma "rinomina" funzionerà. È lo stesso dell'esempio che hai visto nella pagina man, appena cambiato.
[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
La chiave è che, se hai visto un esempio che mostra come munger una parte del nome del file con una regex, questo è l'unico esempio di cui hai bisogno. Le estensioni non hanno uno status speciale sui filesystem unix:sono solo una parte del nome del file che si trova dopo un .
carattere.