Linuxで複数のファイルに同じ内容を書き込みたい時に下記のようにやってもうまくいきません
# testの文字をaaa.txt,bbb.txtに書き込みたい $ echo "test" >> aaa.txt bbb.txt # bbb.txt ファイルを作成されていない $ cat aaa.txt test bbb.txt $ ls aaa.txt
こちらは、aaa.txt と bbb.txt は、リダイレクト演算子 > の後に続いているので、aaa.txt はechoの内容は書き込まれます。
そのため、リダイレクトの対象ファイル名じゃなくて、単なる echo コマンドへの引数(表示する文字列)として解釈されaaa.txt に書き込まれます。
複数のファイルに同じ内容を出力する場合は、teeコマンドを利用する
複数のファイルに同じ内容を書き込みたい場合は、tee コマンドを使うと便利です。
tee は標準入力を受け取り、それを標準出力にも出しながら、同時に指定されたファイルにも書き込むコマンドです。
# 複数のファイルを書き込むにはteeコマンドを利用します $ echo "test" | tee aaa.txt bbb.txt test # どちらのファイルにも書き込まれます $ cat aaa.txt test $ cat bbb.txt test
teeコマンドで画面出力なしで複数のファイルに書き込む方法
tee コマンドは通常、入力された内容をファイルに書き込むと同時に、標準出力にも出力しまので画面にもechoコマンドの内容が出力されます。
この標準出力に出る部分を不要の場合は、その内容の出力を破棄することで、画面への表示をなくせます
$ echo "test" | tee aaa.txt bbb.txt > /dev/null
tee コマンドで追記する場合
複数のファイルに内容を追記(ファイルの末尾に追加)するには、「tee -a」のように「-a」のオプションを使用します。
tee -a: では、指定したファイルが既に存在する場合、内容が追記されます。また、ファイルが存在しない場合は、新規に作成されて書き込まれる点は上書き(-aなし)と同じです。
$ echo "test" | tee -a aaa.txt bbb.txt > /dev/null


