truncateコマンド

7-2. バイナリ処理

今回はtruncateコマンド。
まずはman truncateの冒頭です。

TRUNCATE(1)          ユーザーコマンド          TRUNCATE(1)

名前
       truncate - ファイルのサイズを指定されたサイズに切り
       詰めまたは拡張する

書式
       truncate OPTION... FILE...

そして各オプション。

       -c, --no-create
              ファイルを作成しない

       -o, --io-blocks
              SIZE をバイトではなく I/O ブロックとして扱う

       -r, --reference=RFILE
              サイズとして RFILE のサイズを使用する

       -s, --size=SIZE
              ファイルサイズを SIZE バイトに設定、調整する

       --help この使い方を表示して終了する

       --version
              バージョン情報を表示して終了する

ファイルを指定したサイズにしてくれるコマンドですね。
では使ってみます。 実験用ファイルから。

takk@deb9:~/tmp$ echo HELLO>test1.txt
takk@deb9:~/tmp$ 

文字列”HELLO”に加え、改行分で6Byteのファイルとしました。
ダンプして確認。

takk@deb9:~/tmp$ od -tx1 test1.txt
0000000 48 45 4c 4c 4f 0a
0000006
takk@deb9:~/tmp$ 

ではtruncateでこのファイルを4Byteに切り詰めましょう。

takk@deb9:~/tmp$ truncate -s4 test1.txt
takk@deb9:~/tmp$ od -tx1 test1.txt
0000000 48 45 4c 4c
0000004
takk@deb9:~/tmp$ 

ダンプして確認すると、4Byteのみ残ってますね。
間違えて使うと恐ろしいコマンドです。

次は拡張です。
先ほど4Byteのしたファイルを、今度は7Byteに拡張します。拡張する部分には0が格納されます。

takk@deb9:~/tmp$ truncate -s7 test1.txt
takk@deb9:~/tmp$ od -tx1 test1.txt
0000000 48 45 4c 4c 00 00 00
0000007
takk@deb9:~/tmp$ 

複数ファイルにも使えます。

takk@deb9:~/tmp$ for i in {1..5};do echo HELLO>test$i.txt;done
takk@deb9:~/tmp$ head -1 test*
==> test1.txt <==
HELLO

==> test2.txt <==
HELLO

==> test3.txt <==
HELLO

==> test4.txt <==
HELLO

==> test5.txt <==
HELLO
takk@deb9:~/tmp$ 
takk@deb9:~/tmp$ truncate -s4 test*
takk@deb9:~/tmp$ head -1 test*
==> test1.txt <==
HELL
==> test2.txt <==
HELL
==> test3.txt <==
HELL
==> test4.txt <==
HELL
==> test5.txt <==
HELLtakk@deb9:~/tmp$ 

truncateは、ファイルが存在しなくても使えます。なんだかんだ、これが一番便利です。

takk@deb9:~/tmp$ truncate -s10 {1..5}
takk@deb9:~/tmp$ ls
1  2  3  4  5
takk@deb9:~/tmp$ for i in *;do echo "file:$i";od -tx1 -An $i;done
file:1
 00 00 00 00 00 00 00 00 00 00
file:2
 00 00 00 00 00 00 00 00 00 00
file:3
 00 00 00 00 00 00 00 00 00 00
file:4
 00 00 00 00 00 00 00 00 00 00
file:5
 00 00 00 00 00 00 00 00 00 00
takk@deb9:~/tmp$ 

コメント

タイトルとURLをコピーしました