今回は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$


コメント