我在光学介质上有几个大文件,我想将它们复制到多个目标 - 在这种情况下,我有两个硬盘连接到同一台计算机。是否有可以发挥以下功能的实用程序:
copy source target1 target2 ... targetN
答案1
对于单个文件,您可以tee
将其复制到多个位置:
cat <inputfile> | tee <outfile1> <outfile2> > <outfile3>
或者如果你更喜欢 demoggified 版本:
tee <outfile1> <outfile2> > <outfile3> < <inputfile>
请注意,正如 Dennis 在注释中指出的那样,tee
输出到stdout
以及列出的文件,因此在上面的示例中使用重定向指向文件 3。您也可以将其重定向到如下所示 - 这样做的好处是使文件列表在命令行上保持更一致(这可能使编写可变数量文件的解决方案脚本变得更容易),但效率稍低(尽管效率差异很小:大约与使用版本或不带 的版本/dev/null
之间的差异相同):cat
cat
cat <inputfile> | tee <outfile1> <outfile2> <outfile3> > /dev/null
您可能可以将上述方法之一与以下方法结合起来:find
很容易地对一个目录中的多个文件进行操作,但不太容易对分布在目录结构中的文件进行操作。否则,您可能只需要将多个复制操作设置为并行的单独任务,并希望操作系统磁盘缓存足够明亮和/或足够大,以便每个并行任务都使用缓存的读取数据,而不是导致驱动器磁头抖动。
可用性:tee
在标准 Linux 设置和其他 unix 或类 unix 系统上通常可用,通常作为 GNU“coreutils”包的一部分。如果您使用的是 Windows(您的问题未指定),那么您应该在各种 Windows 端口(如 Cygwin)中找到它。
进度信息:由于从光学介质复制大型文件可能需要一些时间(或通过慢速网络,或从本地快速介质复制更大的文件),进度信息可能很有用。在命令行上,我倾向于使用管道查看器(在大多数 Linux 发行版和许多 Windows 端口集合中可用,并且在无法直接使用的地方可以轻松地自行编译)为此 - 只需cat
像pv
这样替换:
pv <inputfile> | tee <outfile1> <outfile2> > <outfile3>
答案2
答案3
答案4
在 bash (Linux、Mac 或 Cygwin) 中:
cat source | tee target1 target2 >targetN
(tee 将其输入复制到 STDOUT,因此在最后一个目标上使用重定向)。
在 Windows 中,Cygwin 通常是多余的。相反,你可以从Unx工具类项目,其中包括 cat、tee 和许多其他。