# ファイルを空にする cp /dev/null /tmp/a.txt > /tmp/a.txt :> /tmp/a.txt : > /tmp/a.txt echo -n > /tmp/a.txt
cp /dev/null
「cp」コマンドは以前投稿しました。「無」ファイルをコピーするイメージです。
>、:>、: >
「>」は左側の内容を右側のファイルに書き込みます。最初の「何もなし」は、それこそ「無」をファイルに書き込んでいると考えればよいのだと思います。
次の2つですけれども、「:」という何もしないコマンドを使用しています。
「:」は何もしない。「:」を実行した後に0を戻り値として返す。
この説明だけを読みますと、ともすれば「0」がファイルに書き込まれてしまうのでは?と思いましたけれども、「何もしない」部分が書き込まれるようです。実際に試してみました。
何もしないということが「>」に渡される = 結果のないデータ(つまり「無」)がファイルに書き込まれる、ということではないでしょうか?妄想ですので正しいかどうかはわかりません♪
また、「:>」でも「: >」でも同じ結果となりました。これは、「:>」というコマンドがあるわけではなく、「:」と「>」というコマンドの組み合わせであるということがわかります。
ファイルを空にする、という動作があまりにも特殊ですので、最初は「:>」というコマンドがあるのかと思っておりました。
echo -n
標準出力になにもないものを出力し、それを「>」でファイルに上書きすることで空にしております。
このとき、改行が書き込まれてしまうため、ファイルが空にならない問題が発生しますけれども、echo に「-n」オプションを付けて「最後の改行を出力しない」ようにすれば解決ですの♪
おわりに
以前コチラの投稿で、コピーコマンドを使用したファイルを、削除、ではなく空にする方法をご案内いたしました。
トランケート、トランケイト、truncate と言えばよいのかしら?ともかく、次でございます。
大変うれしいことに、次のようなコメントをいただきました。
もっと簡単に
:> file.txt
で簡単に空になりますよ。
ありがとう存じます♪これをきっかけに今回さらに調べ、試すことができました。重ねて感謝いたします。
最後に、参考にさせていただいたページを紹介して締めくくりたいと思います。ありがとう存じます♪
- Linuxでファイルサイズを0にする
- Empty a file | commandlinefu.com
- Linuxコマンド集 – 【 : 】 何もせず,0を返す:ITpro
- Linuxコマンド集 – 【 echo 】 引数に与えられた文字列を表示する:ITpro
以上です。