DESIGN / CODE / INFRA / AI

解説

「>」と「>>」は何が違う?ファイルへの上書きと追記を安全な練習先で比べよう

コマンドの結果を保存するつもりで、前にあった内容が消えた。「>」と「>>」で、すでにあるファイルの扱いが違うことを知っておこう。

「>」と「>>」は何が違う?ファイルへの上書きと追記を安全な練習先で比べよう
保存リストを見る →
この記事の道しるべ 6項目

コマンドの結果を保存するつもりで、前にあった内容が消えた。「>」と「>>」で、すでにあるファイルの扱いが違うことを知っておこう。

Bashとprintf、catを使える環境で、空の練習フォルダーを用意する。本当のログや原稿と同じ名前は使わず、掲載する練習用ファイルだけで試してね。

>は、通常は内容を置き換える

mkdir redirect-practice
cd redirect-practice
printf 'first\n' > note.txt
printf 'second\n' > note.txt
cat note.txt

通常の設定なら、最後に表示される内容はsecondの一行。二回目の>が、もともとのfirstへ追記したのではなく、内容を書き直したためだよ。

すでにある同名フォルダーへ入って実行しないようにしよう。練習先が作れなかったら、そのまま続けず、別の新しい名前へ変える。

>>は、後ろへ足す

printf 'first\n' > note.txt
printf 'second\n' >> note.txt
cat note.txt

今度はfirstとsecondの二行になる。>>は、既存の内容の後ろへ出力を追加するためのリダイレクトだよ。ファイルがなければ作成される。

編集部では、新しいBashの練習環境で、この一行・二行の結果を実行して照合した。普段のファイルへ同じ操作を行ったものではないよ。

改行まで自動で補うわけではない

printf 'A' > joined.txt
printf 'B' >> joined.txt
cat joined.txt

この例の内容はAB。>>はファイルの後ろへ書くが、自動で行を分ける指定ではない。printfの文字列に改行があるかどうかで、見た目も変わるんだ。

指定 既存ファイルの基本的な扱い
> 通常は内容を切り詰めて書く
>> 内容の後ろへ追加する

コマンドが失敗したら、元の内容は残る?

リダイレクトの準備は、コマンド本体の実行より前に行われる。>でファイルが開かれたあと、プログラムが失敗したり何も出力しなかったりしても、元の内容が保たれる保証はない。

大切なファイルへ直接向けず、別の新しい保存先へ出して中身を確かめる設計も考えよう。何を戻したいかがあるなら、実行前に控えと復元方法を用意する。

設定の違いと、出力の種類も見る

Bashのnoclobberなどの設定により、既存ファイルへの>が拒否される場合もある。ただし、その設定がどの端末にも入っているとは限らない。保護があるつもりで、確認を省かないようにしたいね。

また、この例で向けているのは標準出力。エラーの出力先まで全部同じファイルへ入るとは限らないので、必要な出力の種類も分けて確認しよう。

出力先の違いはパイプとリダイレクト、エラーの出力先は標準出力と標準エラーへ。

参照した公式資料

確認日:2026年10月26日。

参考・出典

公開と変更の記録
  • :初回公開

日時は日本時間です。記載のある変更は、確認できた編集記録に基づきます。更新日の違いだけから変更内容を推測して載せることはありません。

更新・訂正の方針 →

みんなのコメント 0

感想や、試してみたことを聞かせてね。コメント・返信は承認後に公開されます。

最初のコメントをどうぞ。