我对 bash 不是很熟练...我想做的是以最快的方式将 DVD-R 的内容复制到两个不同的硬盘上。
(也欢迎基于 UI 的解决方案)
谢谢!
答案1
瓶颈可能是从 DVD 驱动器读取,因此我们必须确保只读取一次,或者读取两次但间隔足够近,以便数据仍在缓存中。后者听起来很难,所以我们选择前者。
我们需要在某个地方安装一个复制器。如果我们只使用基本的 shell 命令,唯一的选择就是tee
。所以我们需要将输入(文件树)转换为流,将流提供给tee
,然后将每个输出流转换回文件树。执行此操作的工具是归档器。对保留在内存中的东西进行压缩是一种浪费,所以我们就使用 吧tar
。
管道 ( command0 | command1
) 允许我们将一个命令的输出馈送到另一个命令中。我们需要将 的输出馈送tee
到二其他命令,因此另一个 bash 构造派上了用场:command1 >(command2)
创建一个管道,该管道作为其第一个命令传递给 ,command1
而不是成为 的标准输出command2
。(在 bash 手册中查找进程替换。)
这是命令(未经测试):
mkdir /media/disk0/copy_of_dvd /media/disk1/copy_of_dvd
cd /media/cdrom
tar cf - . | tee >(tar xf - -C /media/disk0/copy_of_dvd) | tar xf - -C /media/disk1/copy_of_dvd
答案2
一个基于 shell 的解决方案是打开终端并输入:
cp -r /location/of/DVD /hard/drive/a &
cp -r /location/of/DVD /hard/drive/b
该命令cp
用于复制文件,开关-r
会递归复制所有文件。您必须输入 DVD 所在的目录(通常/media/dvd
或类似),然后输入硬盘中想要文件的位置(即/home/diego/mydvd
)。将&
第一个进程发送到后台,您可以立即输入并执行第二个命令。
答案3
正如 Li Lo 对 qbi 的回答的评论中提到的,光盘驱动器(CD、DVD 等)是最慢的驱动器,因此您需要尽量减少从 DVD 驱动器读取的数据量。显而易见的解决方案是将数据从 DVD 复制到硬盘驱动器上的一个位置,然后将其从该位置复制到另一个硬盘驱动器。
cp -r /media/cdrom /location1
cp -r /location1 /location2