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をコピーしました