私はOLD OLD OLD * nixシステムからテラバイト級のデータをコピーしています。ドライブを接続するために新しいハードウェアにお金を使うこともできますが、そのお金を使わないようにします。
システムがひどいです。頻繁に停止し、衝突が発生します。したがって、毎回コピープロセスを再開する必要があります。すでにコピーされているファイルを「スキップする」必要があるため、「追いつく」には時間がかかります。
使用できますが、rsync
システムが遅すぎてrsync
初期在庫スキャン/比較を開始するたびに時間がかかります。
そのため、コピーする必要があるすべてのファイルのワンタイムリストを作成してファイルに保存できると思いました。その後、ファイルを繰り返してファイルをコピーし、その行を削除するスクリプトを持つことができます。スクリプト/コピーが途中で失敗した場合は、中断した部分から続行できます。キューから行を削除する部分を処理する方法がわかりませんが、それを把握しようとしている間に、すでに必要なタスクを実行する公的に利用可能なツールまたはスクリプトが必要になることに気づきました。
したがって、目標は、ファイル入力キューを通過してコピーし、コピーが完了したらキューからそのファイルを削除することです。この特定のユースケースでは必要ありませんが、キューに追加される新しいエントリに対応できる必要があります。もちろん、キューはシステムエラー/問題が発生しても続行できるようにファイルベースでなければなりません。
もし知っている人はいますか?
答え1
これを確実に実行するには、「プロフェッショナル」で実績のあるツールを使用することをお勧めしますが、これには迅速で汚れた即時ソリューションがあります。システムの問題により、ファイルの1行を削除できない可能性があるため、正常にコピーされたファイル名をログファイルに保存する方が安全です。コピーするファイル(ls
結果リダイレクトなど)を含む「todo」ファイルと空の「ログ」ファイルを作成します。その後実行
comm -2 -3 todo log |
while read FN
do echo cp "$FN" "new/path/to/$FN" && echo "$FN" >> log || echo "$FN" >&2
done 2>>errlog
このコマンドを実行するたびに、すでにコピーされ記録されたファイルはスキップされます。 「ファイルがソート順ではない」という警告をsort
避けるために、ファイルを「実行」する必要があるかもしれません。comm