我有一个bash脚本,我正在用于我一直在研究的摄影项目。简而言之,我每天都会用Raspberry Pi相机拍摄日出照片。它将这些图片压缩并压缩成电影并将其上传到我的Dropbox帐户。然后我在家里有另一个Raspberry Pi下载电影,并将它们变回静态图片。我正在使用Image Magick程序对这些图片进行剪辑,以便在一个漂亮的网格中进行布局。它完成后应该非常漂亮。
问题是我的bash脚本效率很低,需要做大量工作才能准备好。我有限的编程知识是一个障碍。我的脚本发布在下面。
照片位于按日期(YYYYMMDD)标记的文件夹中,照片本身按日期标记并排序(YYYYMMDD-0001.jpg,YYYYMMDD-0002.jpg等)。每个文件夹中有1440张图片。
我有一个for循环,它遍历我识别为变量的每个文件夹。我更希望有一个for循环来查找日期范围内的每个文件夹(20151001 - 20161001)。有没有更有效的方式来写这个?我一直在寻找一些东西,但我还没有好运。
非常感谢任何帮助!
DA="20151001/20151001-";
DB="20151002/20151002-";
DC="20151003/20151003-";
DD="20151004/20151004-";
DE="20151005/20151005-";
DF="20151006/20151006-";
DG="20151007/20151007-";
DH="20151008/20151008-";
DI="20151009/20151009-";
DJ="20151010/20151010-";
DK="20151011/20151011-";
DL="20151012/20151012-";
DM="20151013/20151013-";
DN="20151014/20151014-";
DO="20151015/20151015-";
DP="20151016/20151016-";
DQ="20151017/20151017-";
DR="20151018/20151018-";
DS="20151019/20151019-";
DT="20151020/20151020-";
counter=10000
for f in ${DA}*.jpg; do
let "counter+=1"
#Image Magick Montage lays the pictures out in a 10X2 grid.
montage -tile 10x2 -geometry +1+1 ${DA}${counter:1}.jpg ${DB}${counter:1}.jpg ${DC}${counter:1}.jpg ${DD}${counter:1}.jpg ${DE}${counter:1}.jpg ${DF}${counter:1}.jpg ${DG}${counter:1}.jpg ${DH}${counter:1}.jpg ${DI}${counter:1}.jpg ${DJ}${counter:1}.jpg ${DK}${counter:1}.jpg ${DL}${counter:1}.jpg ${DM}${counter:1}.jpg ${DN}${counter:1}.jpg ${DO}${counter:1}.jpg ${DP}${counter:1}.jpg ${DQ}${counter:1}.jpg ${DR}${counter:1}.jpg ${DS}${counter:1}.jpg ${DT}${counter:1}.jpg /media/KINGSTON/montage${counter:1}.jpg
done
答案 0 :(得分:1)
所以你问最快的方法是只通过20151001
到20161001
?我会这样做:
counter=10000
for d in 20*; do
if [ 20151001 -le $d ] && [ $d -le 20161001 ]; then
for f in $d/$d-*.jpg; do
let "counter+=1"
montage -tile 10x2 -geometry +1+1 ${DA}${counter:1}.jpg ${DB}${counter:1}.jpg ${DC}${counter:1}.jpg ${DD}${counter:1}.jpg ${DE}${counter:1}.jpg ${DF}${counter:1}.jpg ${DG}${counter:1}.jpg ${DH}${counter:1}.jpg ${DI}${counter:1}.jpg ${DJ}${counter:1}.jpg ${DK}${counter:1}.jpg ${DL}${counter:1}.jpg ${DM}${counter:1}.jpg ${DN}${counter:1}.jpg ${DO}${counter:1}.jpg ${DP}${counter:1}.jpg ${DQ}${counter:1}.jpg ${DR}${counter:1}.jpg ${DS}${counter:1}.jpg ${DT}${counter:1}.jpg /media/KINGSTON/montage${counter:1}.jpg
done
fi
done
我只进入满足20151001< = $ d< = 20161001的目录。
答案 1 :(得分:1)
最简单的方法可能是使用awk的范围模式:
format/2
答案 2 :(得分:0)
另一个选项可能是使用date
命令从开始日起的任意天数生成日期,例如,将日期提前一天比开始日期更早:
date -d '2015/10/01 +1 day'
Fri Oct 2 00:00:00 BST 2015
现在您可以使用+%Y%m%d
格式化您想要的格式,因此它变为:
date -d '2015/10/01 +1 day' +'%Y%m%d'
20151002
所以,如果你想要全年,从2015/10/01开始一天一次,你可以做到
for i in {0..365}; do
date -d "2015/10/01 +$i days" +'%Y%m%d'
done
如果你想在变量中使用它,你可以这样做:
for i in {0..365}; do
folder=$(date -d "2015/10/01 +$i days" +'%Y%m%d')
echo $folder
done