使用 stat 为触摸提供时间戳

Tim*_*der 11 scripting bash stat

我正在尝试对一些文档进行 OCR 原位(从 Windows 共享上的 linux 命令行)。OCRing 的过程是 find ,我已经使用 find 命令正确地通过循环管道传输文件。

但是我需要保留原始时间戳以进行修改。我目前正在尝试使用 stat 和 touch 如下:

#!/bin/bash
OLDIFS=$IFS

    IFS=$(echo -en "\n\b")

    for f in `find /mnt/library/Libra/Libra/Ashfords -name "*.pdf"`
         do
        ORIGTS=`stat -c "%Y" $f`
        sudo /opt/ABBYYOCR9/abbyyocr9 -rl English -pi -if $f -f PDFA -paemImageOnText -pafpr original -of $f
        touch -t $ORIGTS $f

    done

    IFS=$OLDIFS
Run Code Online (Sandbox Code Playgroud)

当然 touch 命令失败了。单独运行命令我注意到“stat -c”是这样的:

1334758696

这就像我不知道的日期。我觉得我很接近,但无法弄清楚如何将我拥有的日期转换为触摸友好版本。它是某种形式的秒数吗?

Mik*_*kel 17

stat's输出是 Unix 时间戳,也称为自 Epoch 以来的秒数

所有接受日期的 GNU coreutils 都允许您通过在时间戳前加上@.

所以试试这个

touch -d @$ORIGTS $f
Run Code Online (Sandbox Code Playgroud)

请参阅coreutils - 自纪元以来的秒数


gle*_*man 8

touch可以使用该-r选项使用文件的时间戳。您可能想要输出到不同的文件(我假设下面-if是输入文件和-of输出文件)

for f in ...; do
    sudo /opt/ABBYYOCR9/abbyyocr9 ... -if $f ... -of $f.new
    touch -r $f $f.new
    mv $f.new $f
done
Run Code Online (Sandbox Code Playgroud)