特定の作成日のファイルに対してのみmogrify Convertを使用する方法は?

特定の作成日のファイルに対してのみmogrify Convertを使用する方法は?

Mogrifyを使用してアニメーションgifを作成していますconvert。ただし、現在何十もの画像があるフォルダで実行されており、見つかったすべての画像を使用するように指示します。しかし、特定の日に生成されたファイルだけを使用したいと思います。このようなことができますか?

現在使用されているコマンド:

convert -delay 10 -loop 0 images/* animation.gif

私のすべてのファイル名はタイムスタンプなので、次のように範囲を指定できるようにしたいと思います。

convert -delay 10 -loop 0 --start="images/147615000.jpg" --end="images/1476162527.jpg" animation.gif

私はconvert成功せずにマニュアルページを試しました。これは可能ですか?

ベストアンサー1

この小さなシェルスクリプトは現在のディレクトリ内のすべてのファイルを繰り返し、最後に変更されたタイムスタンプをビルドされたスコープとタイムstartスタンプend(この場合は10月10日)と比較します。一致するファイルが配列に追加され、配列filesにファイルがある場合は、そのファイルを呼び出しますconvert。少なくとも2つ以上のファイルが必要な場合-gt 0-gt 1

作成時間は通常ファイルの(Unix)プロパティに保持されないため、この方法は簡単にだまされ、古いファイルがtouch 1476158400.jpg新しいファイルとして表示される可能性があります。 2番目のオプションについては、以下を参照してください。

#!/usr/bin/env bash

start=$(date +%s -d 'Oct 10 2016')
end=$(date +%s -d 'Oct 11 2016')

files=()
for f in *
do
  d=$(stat -c%Z "$f")
  [[ $d -ge $start ]] && [[ $d -le $end ]] && files+=("$f")
done

[[ ${#files[*]} -gt 0 ]] && convert -delay 10 -loop 0 "${files[*]}" animation.gif

あるいは、ファイル名自体が生成タイムスタンプをエンコードする場合は、無差別代入ループを使用して見つけることができます。

start=$(date +%s -d 'Oct 10 2016')
end=$(date +%s -d 'Oct 11 2016')
files=()
for((i=start;i<=end;i++)); do [[ -f "${i}.jpg" ]] && files+=("${i}.jpg"); done
[[ ${#files[*]} -gt 0 ]] && convert -delay 10 -loop 0 "${files[*]}" animation.gif

おすすめ記事