web-dev-qa-db-ja.com

2つの場所に同時にコピーする

私はbashにあまり堪能ではありません...私がやりたいのは、DVD-Rのコンテンツを2つの異なるハードドライブに可能な限り最速の方法でコピーすることです。

(UIベースのソリューションも大歓迎です)

ありがとう!

7
Diego Mijelshon

ボトルネックはDVDドライブからの読み取りである可能性が高いため、データを1回だけ読み取るか、2回読み取る必要がありますが、データがキャッシュに残っているほど十分に近い間隔で読み取る必要があります。後者は難しいように聞こえるので、最初に行きましょう。

デュプリケーターをどこかに置く必要があります。基本的なシェルコマンドに限定する場合、唯一の選択肢はteeです。したがって、入力(ファイルのツリー)をストリームに変換し、そのストリームをteeにフィードして、各出力ストリームをファイルのツリーに戻す必要があります。それを行うツールはアーカイバです。メモリに残っているものの圧縮は無駄なので、tarを使用してみましょう。

パイプ(command0 | command1)を使用すると、コマンドの出力を他の1つのコマンドにフィードできます。 teeの出力をtwo他のコマンドにフィードする必要があるため、別の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

シェルベースのソリューションの1つは、ターミナルを開いて次のように入力することです。

cp -r /location/of/DVD /hard/drive/a &
cp -r /location/of/DVD /hard/drive/b

コマンドcpはファイルのコピーと-rスイッチは、すべてのファイルを再帰的にコピーします。 DVDが置かれているディレクトリを入力する必要があります(通常は/media/dvdまたは同様)、次にハードドライブのファイルを配置する場所(つまり、/home/diego/mydvd)。 &は最初のプロセスをバックグラウンドに送信し、すぐに2番目のコマンドを入力して実行できます。

1
qbi

Li Loのqbiの回答に対するコメントで述べたように、光学ドライブ(CD、DVDなど)は最も遅い種類のドライブであるため、DVDドライブから行う読み取りの量を最小限に抑える必要があります。明白な解決策は、データをDVDからハードドライブの1つの場所にコピーしてから、その場所から別のハードドライブにコピーすることです。

cp -r /media/cdrom /location1
cp -r /location1 /location2
1
David Z