たとえば、マルチパートの.rarファイルをダウンロードしていて、その中に1つのファイルがあるとします。
以前、winrarを使用するWindowsで、part01.rarを開き、抽出を開始しました。すでにダウンロードされている最後のパートの終わりまで抽出していて、次のパートを求められました。たとえば、ビデオを見て、次の部分が終了したときにWinRARで「繰り返し」を押すだけで済みました。
このようなubuntuの方法はありますか? 1つのプロセスが新しい.rarファイルを待ってから、「リピート」を他のプロセスに送信するような、自動コマンドラインソリューションも好みます。
理解するのはそれほど難しくないことを願っています:)
デビッド。
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
...などの別のプログラム)を見つけることができれば、上書きせずに効率が向上します。
unrar
が可能なすべてを抽出し、マルチパートRARアーカイブ内の欠落している部分を無視するためのコマンドは次のとおりです。
_ unrar x -kb myfile.rar.01
_
-kb は、「壊れた抽出ファイルを保持する」を表します。
これにより、欠落している部分までビデオが抽出されて停止するため、前の部分のビデオを引き続き視聴できます。
残念ながら、それは欠品を待ちません。スクリプトを使用してピースをunrar
にフィードして待機するソリューションは、残念ながら同様に機能しません。これは、FIFO(first-in-first-out)ストリームが_/dev/stdin
_はシーク可能ではなく、それがunrar
がアーカイブを処理できるようにするために必要なことのようです。