我正在尝试将一个文件复制到 10 个文件。举例来说,我有一封名为 的电子邮件test1.eml
。我想要同一个文件的 10 个副本。
当我在互联网上搜索时,我遇到了这个 stackoverflow 线程https://stackoverflow.com/questions/9550540/linux-commands-to-copy-one-file-to-many-files并遵循社区成员之一“knittl”提到的 eval 命令。
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
只会读取一次源代码并只执行一个命令。对于大文件来说,它可能不会更有效,并且可能会鼓励碎片,因为tee
会依次在每个输出文件中写入数据块。它还根据您当前的 umask 创建具有权限的文件,而不是像cp
根据选项那样部分或完全复制原始权限。
如果你想节省打字,只需使用zsh
你的 shell(顺便说一句,这就是这些{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
。