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

dka*_*hik 3 command-line cp files

我正在尝试将一个文件复制到 10 个文件。例如,假设我有一封名为 的电子邮件test1.eml。我想要同一个文件的 10 个副本。

当我在互联网上搜索时,我遇到了这个 stackoverflow 线程/sf/ask/668537831/并遵循其中之一提到的 eval 命令社区成员'knittl'。

eval 'cp test1.eml 'test{2..10}.eml';'
Run Code Online (Sandbox Code Playgroud)

上面提到的命令有效并且符合我的要求。有没有其他替代/更优雅的命令来实现这一点,因为提到 eval 命令的人告诉它这是一种肮脏的黑客攻击。

小智 11

我会做类似for i in {2..10}; do cp test1.eml test$i.eml; done
Yet 或多或少相同的事情。


Sté*_*las 6

 tee >test2.eml test{3..10}.eml < test1.xml
Run Code Online (Sandbox Code Playgroud)

只会读取一次源代码并只执行一个命令。对于大文件,它可能不会更有效,并且可能会鼓励碎片化,就像tee在每个输出文件中依次写入数据块一样。它还根据您当前的 umask 创建具有权限的文件,而不是部分或完全复制原始权限,cp具体取决于选项。

如果你想保存打字,只需zsh用作你的外壳({2..10}顺便说一下,这些结构来自哪里)

 for f (test{2..10}.eml)cp test1.eml $f
Run Code Online (Sandbox Code Playgroud)

这和你的一样短:

 eval 'cp test1.eml 'test{2..10}.eml';'
Run Code Online (Sandbox Code Playgroud)

更直观/易读,更容易推广到带有更多问题字符的文件名。

随着zsh假设你没有禁用multios选项,你也可以这样做:

<test1.eml >test{2..10}.eml
Run Code Online (Sandbox Code Playgroud)

在那里,zshtee内部进行并调用cat. 所以它的效率略低于该tee方法。