Edited at

truncateコマンドでファイルを空にする

More than 1 year has passed since last update.


echoコマンドのリダイレクトによる方法は扱いづらい

ファイルを空にする方法は色々あるかと思うが、自分はこれまで次のようにechoコマンドのリダイレクトを使っていた。

$ echo -n > target.txt

しかしこのやり方は空にしたいテキストファイルに対して書き込み権限が無いと、sudoで実行しても弾かれてしまう。

$ sudo echo -n > target.txt

-bash: target.txt: Permission denied

なのでそういう場合は次のようにsh -cを使って、shコマンドの引数として実行するコマンドを渡さなければならなかった。

$ sudo sh -c 'echo -n > target.txt'

しかし、このやり方にはファイル名の補完がうまく効かないという問題があり、場合によっては少々危険になり得る。

...というように、リダイレクトを使う方法は特に権限周りで面倒になってしまうことが多い。


そこでtruncateコマンドですよ

こういう時は、次のようにtruncateコマンドを使う方が楽。

$ truncate target.txt --size 0

--sizeオプションに0を与えてファイルサイズを0、つまり空にしている。

書き込み権限が無いファイルの場合は、単純にsudoで実行すれば良い(sh -cなど使わなくていい)。

$ sudo truncate target.txt --size 0

※ truncateコマンドの参考リンク

https://linuxjm.osdn.jp/html/GNU_coreutils/man1/truncate.1.html