假设我下载了一个多部分 .rar 文件,里面有一个文件。
之前在 Windows 上使用 winrar 时,我打开 part01.rar,然后开始解压。它一直解压到最后一部分结束,最后一部分已经下载完毕,然后提示我进入下一部分。例如,我可以观看视频,然后只需在 WinRAR 中点击“重复”,因为下一部分已经完成。
ubuntu 上有这样的方法吗?我甚至更喜欢自动命令行解决方案……比如一个进程等待新的 .rar 文件,然后将“重复”发送给另一个进程……
我希望这不太难理解:)
大卫。
答案1
一个舒适的脚本或简单unrar -kb
Unrar 本身提供了一个选项(-kb
) 以保留损坏的(或不完整的)提取文件。
这里要注意的是退出代码 (3),它不同于 0,表示发生了错误8-)
。
因此,您可以简单地编写一个脚本尝试提取文件直到成功(退出代码 0)。
阅读其帮助man unrar
(每天给几个人帮助永远不会有害),您可能会注意到至少还有几个对脚本有用的其他选项,即-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
unrar
提取多部分 RAR 档案中的所有内容并忽略缺失部分的命令是:
unrar x -kb myfile.rar.01
在哪里 -kb 代表“保留损坏的提取文件”。
这应该会提取视频到缺失的部分并停止,从而让您继续观看之前部分的视频。
不幸的是,它不会等待丢失的片段。使用脚本提供片段unrar
并等待的解决方案,不幸的是,效果并不好,因为 FIFO(先进先出)流/dev/stdin
是不可查找的,而这显然是unrar
处理档案所需要的。