使用命令行制作单个文件的多个副本的替代解决方案?

使用命令行制作单个文件的多个副本的替代解决方案?

我正在尝试将一个文件复制到 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

相关内容