僕の備忘録(PC、UN*X、ネットワーク関連が中心)なんです。
自分の書いたところは適当(な時とか)に書き換えますので御了承を。
truncate(2)。といってもtruncate(1)は見当たらないし、 Cでどう書くのかよくわからないので Perl。
$ touch foo.txt ; perl -e 'truncate("foo.txt", 1000000);' $ ls -alFh foo.txt -rw-r--r-- 1 user group 977K 2010-12-15 11:34 foo.txt $ du -h foo.txt 0 foo.txt $ cp foo.txt bar.txt $ ls -alFh bar.txt -rw-r--r-- 1 user group 977K 2010-12-15 11:34 bar.txt $ du -h bar.txt 0 bar.txt $ rsync -a foo.txt baz.txt $ du -h baz.txt 984K baz.txt $ dd if=foo.txt of=qux.txt 1953+1 records in 1953+1 records out 1000000 bytes (1.0 MB) copied, 0.02885 s, 34.7 MB/s $ du -h qux.txt 984K qux.txt
truncate でディスクサイズに関係なくファイルサイズを指定
できるらしいが、FreeBSDではcp(1)したら、コピーされた
ファイルは、そのとおりの大きさに膨らんでしまう。
(過去日記)
これはFreeBSD-8.1 でも確認できた(同じ方法で追試)。
Linux(Debian Lenny)では、cp(1)では変らない。rsync(1)したり、
ネットワークで転送したりすると大きくなってしまうけど。
scp(1)でローカルにコピーしてみたが、どちらもcp(1)と同様だった。
あと、touch(1)で新規作成した空っぽのファイルを truncate で伸ばしても、
FreeBSDのdu では 0 とは表示されなかった。
リンクはご自由にどうぞ。でもURLや内容が変った場合はあしからず。