ファイルを空っぽにしたい。
dhcp leases とか log とかファイルを空っぽにしたい事があると思います。
rm && touch
単純に考えると、rm して touch ですが。パーミッションが初期化されるので面倒です。
rm fileA && touch fileA
空文字を書き出す。(リダイレクト)
/dev/null から空っぽを取り出せばいいのです。
cat /dev/null > /tmp/dhcp.leases
この他にも、リダイレクトを応用すると次のような方法があります。
: > file echo -n > file print '' > file
bash の コロン(:)は 何もしない(true)です。なので、: > a
は次のようにもかけます。
また falseも結果としておなじになるのでファイルを空っぽにすることができます。
: > file true > file false> file
ファイルを空にするにはリダイレクトが便利なようです。
空っぽへ編集する。
sed を用いて、空ファイルへ編集すればいいとわかります。
sed 'd' -i a
sed で全行(指定省略)にたいして、d (delete)を発行します。
同等のことはvi/ex/ed コマンドでもできるかもしれませんが試してません。
vim なら ex モードを使って書くことも可能ですが、現実的ではありませんでした。
vim -e +'norm dG' +'wq' fileA
空っぽのファイルをコピーする
/dev/null はいつでも空っぽなので cp コマンドでもできます。
cp /dev/null file
dd する
/dev/null はいつでも空っぽなので dd コマンドでもできます。
dd if=/dev/null of=/tmp/echo bs=1 count=0
truncate コマンド
この目的(ファイルを指定サイズにする)ためには、truncate コマンドが便利です。
truncate -s0 file
ただし、busyboxなどの極限環境ではtruncateは使えないことがあると思います。
alias を使う
truncate がない場合などに、aliasや関数を使うと便利かもしれない。
function trancate(){ dd if=/dev/null of=$1 bs=$2 count=1 }