おまけの質問への回答はこちらです。
<ブロック引用>実際には、20091231 2359 NewYear.jpg のように、写真の作成日をファイル名に入れたいと考えています。残念ながら、それを実現するには、重要なコマンドの組み合わせが必要ではないでしょうか?
EXIF データから写真の作成日を取得したいと仮定すると、そのための別のツールが必要になります。幸いなことに、jhead
であることが判明しました。 -n
を使用して、必要なことを正確に実行する簡単な方法を提供します オプション。
$ 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
[...]
以下に例を示します:
$ jhead -n%Y-%m-%d-%f New_year.jpg
New_year.jpg --> 2009-12-31-New_year.jpg
編集 :もちろん、たくさんの写真に対してこれを行うには、次のようになります:
$ for i in *jpg; do jhead -n%Y-%m-%d-%f $i; done
日付のフォーマットを好みに合わせて微調整するには、 date --help
の出力を見てください 、 例えば;利用可能な形式コードが一覧表示されます。
(jhead はさまざまなシステムで広く利用できます。たとえば Ubuntu や Debian を使用している場合は、単純に sudo apt-get install jhead
と入力します。 インストールします。)
名前の変更部分だけでも、'rename' プログラムが機能します。これは、man ページで見た例と同じですが、入れ替えただけです。
[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
重要なのは、ファイル名の一部を正規表現で変更する方法を示す例を見た場合、それが必要な唯一の例であるということです。拡張機能は、UNIX ファイルシステムでは特別なステータスを持っていません。それらは、たまたま .
の後にあるファイル名の一部です。