web-dev-qa-db-ja.com

ダウンロード中にマルチパート.rarを抽出する

たとえば、マルチパートの.rarファイルをダウンロードしていて、その中に1つのファイルがあるとします。

以前、winrarを使用するWindowsで、part01.rarを開き、抽出を開始しました。すでにダウンロードされている最後のパートの終わりまで抽出していて、次のパートを求められました。たとえば、ビデオを見て、次の部分が終了したときにWinRARで「繰り返し」を押すだけで済みました。

このようなubuntuの方法はありますか? 1つのプロセスが新しい.rarファイルを待ってから、「リピート」を他のプロセスに送信するような、自動コマンドラインソリューションも好みます。

理解するのはそれほど難しくないことを願っています:)

デビッド。

2
davidbaumann

居心地の良いスクリプトまたは単にunrar -kb

Unrar自体は、壊れた(または不完全な)抽出ファイルを保持するためのオプション(-kb)を提供します。
ここで注意すべきことは、0とは異なり、エラー8-)の発生を示す終了コード(3)です。
したがって、単純に成功するまでファイルを抽出しようとするスクリプトを作成できます(終了コード0)。

man unrarのヘルプを読むと(1日に数人の人を与えることは決して害にはなりません)、スクリプトに役立つ他のオプションが少なくとも2つあることに気付くかもしれません。つまり、ファイルの上書きを強制する-o+-inulです。そして出力を抑制します。

スクリプトの名前がgo.shの場合は、スクリプトを実行可能(chmod u+x ./go.sh)にしてから、./go.sh Myfile.part01.rarを実行できます。スリープ時間と許可される最大反復回数の値を変更できることに注意してください。

#!/bin/bash
MaxCounter=5       # Max number of iteration before it exits 
TimeToSleep=10m    # Time to sleep between 2 iteractions
COUNTER=0

until [ $COUNTER -gt $MaxCounter  ] 
 do 
   printf "### Attempt $COUNTER on $MaxCounter\t"
   unrar x "$@" -kb -inul -o+ \
     && { printf "\n\n### Extraction completed\n\n ### DONE ###\n\n"; exit 0; }\  
     || echo "### Extraction Not completed"
   let COUNTER+=1  
   sleep $TimeToSleep
 done
printf "\n\n### $MaxCounter iterations reached \n\n ### ERROR ### \n"

注:欠点として、ファイルが毎回上書きされます...しかし、それはあなたがwinrarで行っていたことでもありました...良いことは、ファイルが存在する可能性が十分に高いことです。いくつかのキャッシュバッファとそれは毎回実際に上書きされることはありません...
抽出を継続するunrarのバージョン(または7z...などの別のプログラム)を見つけることができれば、上書きせずに効率が向上します。

2
Hastur

unrarが可能なすべてを抽出し、マルチパートRARアーカイブ内の欠落している部分を無視するためのコマンドは次のとおりです。

_ unrar x -kb myfile.rar.01
_

-kb は、「壊れた抽出ファイルを保持する」を表します。

これにより、欠落している部分までビデオが抽出されて停止するため、前の部分のビデオを引き続き視聴できます。

残念ながら、それは欠品を待ちません。スクリプトを使用してピースをunrarにフィードして待機するソリューションは、残念ながら同様に機能しません。これは、FIFO(first-in-first-out)ストリームが_/dev/stdin_はシーク可能ではなく、それがunrarがアーカイブを処理できるようにするために必要なことのようです。

0
harrymc