1つのファイルを10のファイルにコピーしようとしています。たとえば、という電子メールがありますtest1.eml
。同じファイルのコピーが10個必要です。
インターネットで検索中にこのstackoverflowスレッドが見つかりました。https://stackoverflow.com/questions/9550540/linux-commands-to-copy-one-file-to-many-filesそして、コミュニティメンバーの一人が「knittl」と言った評価コマンドに従ってください。
eval 'cp test1.eml 'test{2..10}.eml';'
上記のコマンドは機能し、私の要件を満たしています。 evalコマンドに言及した人が私に汚いハッキングだと言ったので、これを達成するための代替/よりエレガントなコマンドはありますか?
答え1
私は似たようなことをしますが、for i in {2..10}; do cp test1.eml test$i.eml; done
ほぼ同じことをします。
答え2
tee >test2.eml test{3..10}.eml < test1.xml
ソースコードは一度だけ読み取られ、1つのコマンドのみが実行されます。大容量ファイルの場合、効率が悪くなり、tee
データブロックが各出力ファイルに順番に書き込まれるため、断片化が発生する可能性があります。また、cp
オプションに従って元の権限を部分的または完全にコピーするのではなく、現在のumaskに基づいて権限を持つファイルを作成します。
入力を保存するにはzsh
シェルを使用してください。 (ところで、この{2..10}
構文はここから来ています。)
for f (test{2..10}.eml)cp test1.eml $f
これはあなたと同じくらい短いです:
eval 'cp test1.eml 'test{2..10}.eml';'
ただし、より問題のある文字を含むファイル名を使用すると、より直感的で明確で一般化するのが簡単です。
zsh
このオプションを無効にしていない場合は、次のこともmultios
できます。
<test1.eml >test{2..10}.eml
そこでzsh
内部タスクが実行され、tee
呼び出されるため、cat
その方法よりもやや効率が低くなりますtee
。