2

答えを検索できるように質問を表現するのが難しいと感じています。私の問題は次のとおりです。

2分ごとに写真を撮り、番号付きファイルとして保存するWebカメラがあります。最初の写真は0000時間に撮影され、image001.jpg、0002hrsimage002.jpgなどの名前が付けられます。2359時間に、すべての写真が24時間のタイムラプスビデオに変換され、daily_video.movとして保存されます。(翌日の)0000時に、古いimage001.jpgが上書きされ、新しいdaily_video.movの生成を含むプロセス全体が繰り返されます。これはすべて、ファイルの名前付けと上書きを行うWebカメラ、およびビデオを作成するために1日1回fffmpegを実行するcronジョブで正常に機能しています。

私が今やりたいのは、30日ごとのファイルを日の画像から新しいフォルダーにコピーし、順番に名前を付けることによって、たとえば1か月以上のタイムラプスビデオを作成することです。すなわち。1日目; image030.jpg、image060.jpgなど...はArchive001.jpg、Archive002.jpgなどに名前が変更されます...しかし2日目。image030.jpg、image060.jpgなど... Archive025.jpg、Archive026.jpgなどに名前を付ける必要があり、月末までファイルをその日から順番に増加するファイルの名前リストにコピーするまで繰り返します。プロセスを繰り返すことができる月末に使用します。

それは理にかなっていますか?!!

4

1 に答える 1

1

次のようなbashスクリプトを使用できます。2359時に電話してください。Archive00X.jpgchmod +x myScript に名前を変更しませんでしたが、現在の日付を追加することで、適切なアルファベット順になります。

出力例:

cp files/image000.jpg >> archive/image_2012-08-29_000.jpg
cp files/image030.jpg >> archive/image_2012-08-29_030.jpg
....
  • pSourceとpDestをパス(できれば絶対パス)に適合させます
  • 必要に応じてoffsetとmaxnumを調整します。maxnumが大きすぎると、一部のファイルが欠落していることがわかりますが、それ以外の場合は正しく機能します。
  • 邪魔になる場合はエコーラインを削除してください;)

コード:

#!/bin/bash

pSource="files"
pDest="archive"

offset=30
maxnum=721

curdate=`date "+%F"`

function rename_stuff()
{
 myvar=0
 while [ $myvar -lt $maxnum ]
 do
    forg=`printf image%03d.jpg ${myvar}`
    fnew=`printf image_%s_%03d.jpg ${curdate} ${myvar}`

    forg="$pSource/$forg"
    fnew="$pDest/$fnew"

    if [ -f "$forg" ]; then
     echo "cp $forg >> $fnew"
     cp "$forg" "$fnew"
    else
     echo "missing file $forg"
    fi

    myvar=$(( $myvar + $offset ))
done
}

rename_stuff
于 2012-08-29T19:35:26.240 に答える