互斥错误减去日期

Mutual Exclusion bug subtracting dates

我正在尝试 运行 bash 代码,在我认为从日期中减去分钟数时出错。有一个与互斥有关的错误,我找不到相关信息。

代码运行此命令:

datestr=$(date -d -3 minutes -r IOP4/DSC_0041.JPG "+%Y%m%d_%H%M")

当我 运行 只是 date -r IOP4/DSC_0041.JPG "+%Y%m%d_%H%M" 我得到值:20220217_2223 因此,我遇到的问题似乎与 -d -3 minutes 部分有关。根据我在网上阅读的内容,我认为如果改写该命令可能会起作用:

datestr=$(date -d "-3 minutes" -r IOP4/DSC_0041.JPG "+%Y%m%d_%H%M")

datestr=$(date -d "-3 min" -r IOP4/DSC_0041.JPG "+%Y%m%d_%H%M")

datestr=$(date -d "now -3 minutes" -r IOP4/DSC_0041.JPG "+%Y%m%d_%H%M"),

None这些作品要么;不管我得到什么错误:

date: the options to specify dates for printing are mutually exclusive Try 'date --help' for more information.

-d-r都给了date一个参考值所以才会报错,有冲突。不幸的是,手册页没有提到它们是互斥的。

文件中的参考日期可以传递给第二个 date 命令

dr=$(date -r myrouter-000.png --iso=seconds)
echo "${dr:0:10}_${dr:11:5}" | tr -d ':-'

20211028_2009

date -d "$(date -r myrouter-000.png --iso=seconds) -9 minutes" "+%Y%m%d_%H%M"

20211028_2000

date 命令不能在单个命令中同时执行来自文件的引用和来自字符串的日期,因此您需要将它们分解为单独的命令。此外,如果您知道将日期减少的分钟数,cpu 时间会更快,只需将其转换为秒(3 分钟 = 180 秒)并从时间戳中减去它。

date -s "@$(($(date -r IOP4/DSC_0041.JPG "+%s") - 180))" "+%Y%m%d_%H%M"

基本上,$(date -r IOP4/DSC_0041.JPG "+%s") 部分获取文件的时间作为 unix 时间戳,这是自 1970 年 1 月 1 日以来的秒数。您可以轻松地从该数字中减去 180 $(($(date -r IOP4/DSC_0041.JPG "+%s") - 180)) 使用一个原生的 bash built-in 数学函数,以及 re-interpret(使用 date -s "@[number] 语法)返回到语句末尾您喜欢的任何日期格式。 "+%Y%m%d_%H%M"