减去十六进制文件名

时间:2013-06-11 18:22:17

标签: hex qnx difference

使用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但只切换输出值。有没有办法返回一个整数,这是这些十六进制值的差异?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

current=$(echo "ibase=16; $fname" |bc)

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