Zde je odpověď na bonusovou otázku.
Vlastně chci do názvu souboru vložit datum vytvoření fotografie, abych dostal něco jako 20091231 2359 NewYear.jpg. Obávám se, že k tomu potřebuji nějakou netriviální kombinaci příkazů?
Za předpokladu, že chcete vzít datum vytvoření fotografie z EXIF dat, budete k tomu potřebovat samostatný nástroj. Naštěstí se ukázalo, že jhead
nabízí triviální způsob, jak dělat přesně to, co chcete, s -n
volba.
$ 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
[...]
Zde je příklad:
$ jhead -n%Y-%m-%d-%f New_year.jpg
New_year.jpg --> 2009-12-31-New_year.jpg
Upravit :Samozřejmě, udělat to pro hromadu fotek, bylo by to něco jako:
$ for i in *jpg; do jhead -n%Y-%m-%d-%f $i; done
Chcete-li upravit formátování data podle svých představ, podívejte se na výstup date --help
, například; zobrazí seznam dostupných kódů formátů.
(jhead je široce dostupný pro různé systémy. Pokud používáte například Ubuntu nebo Debian, jednoduše zadejte sudo apt-get install jhead
nainstalovat.)
Pouze pro část přejmenování bude fungovat program „přejmenovat“. Je to stejné jako v příkladu, který jste viděli na stránce manuálu, jen se přepnul.
[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
Klíčem je, že pokud jste viděli příklad, který ukazuje, jak změnit jednu část názvu souboru pomocí regulárního výrazu, je to jediný příklad, který potřebujete. Rozšíření nemají na unixových souborových systémech žádný zvláštní status – jsou jen částí názvu souboru, která je náhodou za .
postava.