cpioで複数ファイルのエンディアン変換

前回cpioを使ってエンディアン変換を行いました。
cpioは複数ファイルを扱えますので、一括でエンディアン変換することができます。
今回は複数ファイルのエンディアン変換です。

まず実験用ファイルをsplitで作ります。

takk@deb9:~/tmp/dir1$ seq 64 | perl -ne 'print chr' | split -db8
takk@deb9:~/tmp/dir1$ ls
x00  x01  x02  x03  x04  x05  x06  x07
takk@deb9:~/tmp/dir1$ 

上のコマンドで生成したファイルの中身はこのようになっています。

takk@deb9:~/tmp/dir1$ for i in *;do echo -n $i:;od -td1 -An $i;done
x00:    1    2    3    4    5    6    7    8
x01:    9   10   11   12   13   14   15   16
x02:   17   18   19   20   21   22   23   24
x03:   25   26   27   28   29   30   31   32
x04:   33   34   35   36   37   38   39   40
x05:   41   42   43   44   45   46   47   48
x06:   49   50   51   52   53   54   55   56
x07:   57   58   59   60   61   62   63   64
takk@deb9:~/tmp/dir1$ 

では、cpioでアーカイブを作りましょう。

takk@deb9:~/tmp/dir1$ find -type f | cpio -o > ../a.cpio
1 block
takk@deb9:~/tmp/dir1$ cd ../
takk@deb9:~/tmp$ ls
a.cpio  dir1
takk@deb9:~/tmp$ 

最初に作った複数のファイルをまとめて、a.cpioというファイル名でアーカイブにしました。

このアーカイブをdir2というディレクトリを作成して、そこに展開してみます。

takk@deb9:~/tmp$ mkdir dir2
takk@deb9:~/tmp$ cd dir2
takk@deb9:~/tmp/dir2$ cat ../a.cpio | cpio -i
1 block
takk@deb9:~/tmp/dir2$ ls
x00  x01  x02  x03  x04  x05  x06  x07
takk@deb9:~/tmp/dir2$ !for
for i in *;do echo -n $i:;od -td1 -An $i;done
x00:    1    2    3    4    5    6    7    8
x01:    9   10   11   12   13   14   15   16
x02:   17   18   19   20   21   22   23   24
x03:   25   26   27   28   29   30   31   32
x04:   33   34   35   36   37   38   39   40
x05:   41   42   43   44   45   46   47   48
x06:   49   50   51   52   53   54   55   56
x07:   57   58   59   60   61   62   63   64
takk@deb9:~/tmp/dir2$ 

展開できました。元にファイルの内容と変化していないですね。

今度は、展開時に、-bオプションを指定して、4Byteエンディアン変換をします。

takk@deb9:~/tmp/dir2$ rm *
takk@deb9:~/tmp/dir2$ ls
takk@deb9:~/tmp/dir2$ cat ../a.cpio | cpio -ib
1 block
takk@deb9:~/tmp/dir2$ !for
for i in *;do echo -n $i:;od -td1 -An $i;done
x00:    4    3    2    1    8    7    6    5
x01:   12   11   10    9   16   15   14   13
x02:   20   19   18   17   24   23   22   21
x03:   28   27   26   25   32   31   30   29
x04:   36   35   34   33   40   39   38   37
x05:   44   43   42   41   48   47   46   45
x06:   52   51   50   49   56   55   54   53
x07:   60   59   58   57   64   63   62   61
takk@deb9:~/tmp/dir2$ 

ものすごく楽に変換できました。

Leave a Reply

Your email address will not be published. Required fields are marked *

CAPTCHA