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