1

使用 QNX Neutrino,我需要从它们的前辈中减去十六进制值的文件名。这些文件以十六进制的创建时间命名。以下为我提供了纯十六进制值的列表,但我无法从彼此中减去它们。

last=0
find /path/ -type f\(! iname ".*" \) -exec basename {} |
while read fname
do
    current=$fname
    echo "difference is $((current - last)) seconds
done

find 命令给了我:

51b71f38
51b71f44
51b71f50
51b71f5c
51b71f74

我试过使用 echo "ibase=16; $name" | bc 但这只会切换输出的值。有没有办法返回一个整数,这是这些十六进制值的差异?

4

2 回答 2

1

可能是这样的:

find /path/ -type f\(! iname ".*" \) -exec basename {} |
while read fname; do 
    last="$current"
    current="$fname"
    if [ $(( 0x$last )) -ne 0 ]; then  
        echo "difference is $(( 0x$current - 0x$last )) seconds"
    fi
done

测试:

我使用您的 find 命令作为测试文件的输入。

$ cat ff
51b71f38
51b71f44
51b71f50
51b71f5c
51b71f74

$ while read fname; do last="$current" ; current="$fname" ; if [ $(( 0x$last )) -ne 0 ]; then  echo "difference is $(( 0x$current - 0x$last )) seconds" ; fi ; done < ff
difference is 12 seconds
difference is 12 seconds
difference is 12 seconds
difference is 24 seconds
于 2013-06-11T19:03:44.060 回答
0
current=$(echo "ibase=16; $fname" |bc)

实际上给了我我需要内联的十进制值

于 2013-06-11T19:04:26.267 回答