コンソール上で、コマンドの結果を複数のファイルに出力したいことがある。 そういった場合、残念ながら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