今回は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$
コメント