1

QNX Neutrino を使用して、以前のファイル名から 16 進数のファイル名を差し引く必要があります。ファイルは、16 進数で作成された時間によって名前が付けられます。以下は純粋な16進値のリストを取得しますが、それらを互いに差し引くことはできません。

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 しかし、それは出力の値を切り替えるだけです。これらの 16 進値の差である整数を返す方法はありますか?

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)

実際にインラインで必要な 10 進数の値が表示されます

于 2013-06-11T19:04:26.267 に答える