Eu faria algo como for i in {2..10}; do cp test1.eml test$i.eml; done
Ainda é mais ou menos a mesma coisa.
Estou tentando copiar um arquivo para 10 arquivos. Por exemplo, eu tenho uma mensagem de email chamada test1.eml
. Eu quero 10 cópias do mesmo arquivo.
Quando eu procurei na internet, me deparei com esse thread stackoverflow link e seguiu o comando eval mencionado por um dos membros da comunidade 'knittl'.
eval 'cp test1.eml 'test{2..10}.eml';'
O comando acima mencionado funcionou e satisfez meus requisitos. Existem outros comandos alternativos / mais elegantes para conseguir isso, já que a pessoa que mencionou o comando eval disse que é uma espécie de invasão.
tee >test2.eml test{3..10}.eml < test1.xml
só leria a fonte uma vez e executaria apenas um comando. Pode não ser mais eficiente para arquivos grandes e poderia incentivar a fragmentação, pois tee
gravaria blocos de dados em cada arquivo de saída. Ele também cria arquivos com permissões de acordo com sua umask atual, em vez de reproduzir parcial ou completamente as permissões originais, pois cp
depende das opções.
Se você quiser salvar a digitação, use apenas zsh
como seu shell (é aí que as construções {2..10}
vêm de btw)
for f (test{2..10}.eml)cp test1.eml $f
O que é tão curto quanto o seu:
eval 'cp test1.eml 'test{2..10}.eml';'
ainda mais intuitivo / legível e mais facilmente generalizável para nomes de arquivo com caracteres mais problemáticos.
Com zsh
e supondo que você não tenha desativado a opção multios
, você também pode fazer:
<test1.eml >test{2..10}.eml
Lá, zsh
faz o tee
internamente e também invoca cat
. Portanto, é um pouco menos eficiente do que a abordagem tee
.
Tags command-line cp files