【发布时间】:2015-09-23 02:03:46
【问题描述】:
假设我有一个这样的文件列表:
/my/dir/20/banner-35.jpg
/my/dir/18/poster-500.jpg
/my/dir/15/fanart-360.jpg
/my/dir/10/banner-70.jpg
(...)
我需要对它们运行这样的命令:
convert /my/dir/20/banner.jpg -resize x35 -unsharp 0x0.5+0.5+0.008 -quality 95 /my/dir/20/banner-35.jpg
convert /my/dir/18/poster.jpg -resize x500 -unsharp 0x0.5+0.5+0.008 -quality 95 /my/dir/18/banner-500.jpg
但是,我只想对过去 24 小时内修改过的文件执行此操作。在一些帮助下,我最终找到了这个:
find /my/dir -type f -mtime -1 -name '*-*.jpg' -exec bash -c 'for path do dir=${path%/*} file=${path##*/} height=${file%.*}; convert "$dir/${file%-*}.jpg" -resize "x${height#*-}" -unsharp 0x0.5+0.5+0.008 -quality 95 "$path"; touch -r "$dir/${file%-*}.jpg" "$path"; done' _ {} +
我的第一个问题是,如果可能的话,你会如何简化这个命令?
第二个实际上是我遇到的问题......
我需要使用 cron 每天运行此命令并查找仅在过去 24 小时内修改的文件。但是假设我在/my/dir 中有一些在过去 24 小时内更改过的新文件;但是,我在 cron 作业运行之前发生了电源故障,并且计算机仅在 2 天后出现。当作业再次运行时,它会查找过去 24 小时内修改过的文件,并且会因为错过作业而错过几天前修改过的文件。
例如,我可以将mtime 增加到更多天,但这不是一个很好的解决方案,因为每次脚本运行时,它都会重新转换已转换的文件,这是没有意义的。
我该如何解决这个问题?
【问题讨论】: