次の一連のファイルを作成できます。
touch file{A..Z}.txt
それでは、出力をこの範囲に送る最も簡単な解決策は何ですか?
例:echo 'hello, world'
。{A..Z}
答え1
このコマンドを使用してファイルを生成する場合:
touch file{A..Z}.txt
同じ拡張子を使用して同じテキストを同じように作成して生成できます。
echo hello, world | tee file{A..Z}.txt
このtee
コマンドは、次のようにも書き込みます。標準出力したがって、端末に作成されたコピーも受け取ります。/dev/null
必要でない場合は、次にリダイレクトしてください。
echo hello, world | tee file{A..Z}.txt >/dev/null
走るman tee
ローカルシステムのコマンドに関する情報を取得します。たとえば、この-a
フラグはファイルセットにテキストを追加します。
bash
ほとんどの場合、拡張自体はシェルによって実行されます。バラよりman bash
もっと学ぶ。
答え2
存在するzsh
:
echo new test > file{A..Z}.txt
これはmultios
オプションが無効になっていないと仮定します。
実際にfdが書き込みのために何度もリダイレクトされると(、、、、>
リダイレクト>>
演算子を使用します1<>
が、これも適用されます...)、パイプにリダイレクトされ、パイプのもう一方の端に背景zshがあります。同様の方法ですべての宛先にデータを送信するプロセスです。>!
>|
|
zsh
zsh
tee
オプションnoclobber
がオンになっていfileK.txt
て、すでに存在している場合は、リダイレクトが中断され、そのコマンドを開く間にコマンドが実行されないため、削除されませんがfileK.txt
開かれfileA.txt
ますfileJ.txt
(0サイズで生成されます)。
これらのファイルはすべて同時に開くため、あまりにも多くのファイルにtee
リダイレクトすると、開かれたファイル記述子の数の制限に達する可能性があります。
$ echo test > file{A..Z}{A..Z}{A..Z}.txt
zsh: multio failed for fd 3: too many open files
$ echo test | tee file{A..Z}{A..Z}{A..Z}.txt
tee: fileBNH.txt: Too many open files
tee: fileBNI.txt: Too many open files
tee: fileBNJ.txt: Too many open files
[...]
tee: fileZZZ.txt: Too many open files
test
ここでこのようなコマンドを使用すると、echo
実行コストがほとんどなく(同様の動作に必要なパイプを生成し、それを介してデータをプッシュするオーバーヘッドよりも少なくなりますtee
)、並列ではなくシリアルでファイルを開いて、埋め、閉じることができます。ファイルとしてecho
:
for f (file{A..Z}.txt) echo new test > $f
答え3
ファイルをすでに作成していて新しいテキストのみを追加したい場合は、-aオプションを指定してteeコマンドを使用できます。
echo "new text" | tee -a file{A..Z}.txt
ファイルの内容(ファイル0など)をファイルに追加するには:
<file0 tee -a file{A..Z}.txt