【问题标题】:How to find files modified in last day, strip parameters from path and run a command on them daily with cron?如何查找前一天修改的文件,从路径中删除参数并每天使用 cron 对它们运行命令?
【发布时间】: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 增加到更多天,但这不是一个很好的解决方案,因为每次脚本运行时,它都会重新转换已转换的文件,这是没有意义的。

我该如何解决这个问题?

【问题讨论】:

    标签: bash scripting cron


    【解决方案1】:

    我正在考虑将 find 的结果存储在一个文件中,例如,您可以使用 bash 脚本循环遍历条目(对于 `cat findResult` 中的条目) 然后执行你的命令,这要简单得多。至于停电,您可能想通过在处理循环中的每个文件后添加“converted”来重命名转换后的文件。这样您就可以运行 find -name '-.jpg' ! -name '已转换'。

    【讨论】:

    • 我想避免为此创建文件。我需要覆盖文件,这就是重点。
    • 我正在写一个示例脚本,10 后回来
    • 如果不是我可以添加到 cron 的独立运行的单行程序,请不要浪费您的时间。这就是我要找的。但我仍然感谢您努力提供帮助这一事实。
    • 好的,但是你不是在转换命令中混合输入和输出吗? linux.die.net/man/1/convert convert [输入选项] 输入文件 [输出选项] 输出文件
    【解决方案2】:
    #!/bin/bash
    
    find /my/dir -name '*-*.jpg' ! -name "*converted*" > /tmp/findResult
    
    for entry in `cat /tmp/findResult`
    do
       convert $entry -resize x35 -unsharp 0x0.5+0.5+0.008 -quality 95 `echo $entry | sed "s@-[0-9]\+@-converted@"` 
        rm $entry
    done
    rm /tmp/findResult
    

    然后您可以通过发出以下命令添加此脚本:

    $ crontab -e 
     30 08 * * *  bash path_to_script
    

    我正在阅读转换手册,我看到输入文件必须在输出之前。

    【讨论】:

    • 就像我说的,这不是我想要的。不过谢谢。
    猜你喜欢
    • 2010-09-29
    • 1970-01-01
    • 2018-05-21
    • 1970-01-01
    • 1970-01-01
    • 2021-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多