コンソール上で、コマンドの結果を複数のファイルに出力したいことがある。 そういった場合、残念ながらbashの場合、リダイレクトだと複数のファイルへ同時に書き込むといったことは難しい。 じゃあどうすればいいのかというと、teeコマンドであれば複数ファイルを指定できるので、それで対応する。

コマンド | tee ファイル1 ファイル2 ファイル3 ...  >& /dev/null # 追記しない場合
コマンド | tee -a ファイル1 ファイル2 ファイル3 ...  >& /dev/null # 追記する場合
blacknon@BS-PUB-UBUNTU-01:~/test_dir$ ls
blacknon@BS-PUB-UBUNTU-01:~/test_dir$ echo aaa | tee test{01..20}.txt >& /dev/null
blacknon@BS-PUB-UBUNTU-01:~/test_dir$ ls
test01.txt  test04.txt  test07.txt  test10.txt  test13.txt  test16.txt  test19.txt
test02.txt  test05.txt  test08.txt  test11.txt  test14.txt  test17.txt  test20.txt
test03.txt  test06.txt  test09.txt  test12.txt  test15.txt  test18.txt
blacknon@BS-PUB-UBUNTU-01:~/test_dir$ grep '' ./*
./test01.txt:aaa
./test02.txt:aaa
./test03.txt:aaa
./test04.txt:aaa
./test05.txt:aaa
./test06.txt:aaa
./test07.txt:aaa
./test08.txt:aaa
./test09.txt:aaa
./test10.txt:aaa
./test11.txt:aaa
./test12.txt:aaa
./test13.txt:aaa
./test14.txt:aaa
./test15.txt:aaa
./test16.txt:aaa
./test17.txt:aaa
./test18.txt:aaa
./test19.txt:aaa
./test20.txt:aaa

なお、zshの場合は以下のように複数ファイルを指定してのリダイレクトが可能になっている。

BS-PUB-UBUNTU-01% echo $0
zsh
BS-PUB-UBUNTU-01% ls
BS-PUB-UBUNTU-01% echo aaa > test_{01..20}.txt
BS-PUB-UBUNTU-01% ls
test_01.txt  test_04.txt  test_07.txt  test_10.txt  test_13.txt  test_16.txt  test_19.txt
test_02.txt  test_05.txt  test_08.txt  test_11.txt  test_14.txt  test_17.txt  test_20.txt
test_03.txt  test_06.txt  test_09.txt  test_12.txt  test_15.txt  test_18.txt
BS-PUB-UBUNTU-01% grep "" test_*
test_01.txt:aaa
test_02.txt:aaa
test_03.txt:aaa
test_04.txt:aaa
test_05.txt:aaa
test_06.txt:aaa
test_07.txt:aaa
test_08.txt:aaa
test_09.txt:aaa
test_10.txt:aaa
test_11.txt:aaa
test_12.txt:aaa
test_13.txt:aaa
test_14.txt:aaa
test_15.txt:aaa
test_16.txt:aaa
test_17.txt:aaa
test_18.txt:aaa
test_19.txt:aaa
test_20.txt:aaa