Linuxコマンドラインツールを使用して部分的にダウンロードされたファイルを復元する方法は?
停電のため、900MBのうち400MBの大容量ファイルを部分的にダウンロードしましたが、再度ダウンロードを開始したので、最初から再開しました。 400MBで始めるにはどうすればいいですか?
答え1
wget
指定しなかったため、ファイルのダウンロードに使用しているとします。このような場合は、-c
オプション(たとえばwget -c <URL>
)と一緒に使用してみてください。
使用されているプロトコルがftp(URLの外観ftp://...
)の場合、リモートサーバーがダウンロードの再開をサポートしていない古い/古いftpデーモンを使用している可能性があります(最新のftpデーモンはサポートしていますが10年以上経過しました)。 、したがって可能性は少ない)。しかし、この場合は幸運ではないかもしれません。一方、使用されたプロトコルがhttpであれば問題はありません。 (更新:他の専門家(以下の説明のGillesを含む)によると、回復にはhttpを使用するときにサーバーサポートも必要になるため、これはftpとhttpの両方に適用されます。
頑張ってください。
答え2
ダウンロードするファイルが複数あり、いずれかのファイルでダウンロードが中断された場合は、-cと-rが役立ちます。
wget -c -r <url>
このコマンドはすべてのファイルを確認し、不完全またはダウンロードされていないファイルのみをダウンロードします。私は100を超える大容量ファイルをダウンロードする必要があり、サーバーフレンドリーな環境には次のオプションを使用しました。
wget -c -r -np -k --wait=15 --limit-rate=50K <url>
答え3
curl -C -
curl
代わりに使用したい場合wget
:
curl -C - -o index.html https://example.com
からman
:
「-C -」を使用して、カールに転送を再開する位置/方法を自動的に特定するように指示します。次に、指定された出力/入力ファイルを使用して問題を解決します。
次のようにすばやく簡単にテストできます。
printf asdf > index.html
curl -C - -o index.html https://example.com
今始めましょうindex.html
:
asdfctype html>
<html>
<!do
明らかにファイルにはすでに含まれているので、ダウンロード時に最初の4文字をスキップします。その文字がない場合、asdf
ファイルは次のようになります。
<!doctype html>
<html>
サービス能力チェック:accept-ranges: bytes
増分ダウンロードは、次example.com
の理由で機能します。
curl -I https://example.com
サーバーは次を返します。
accept-ranges: bytes
ranges:
カールが要求を途中で開始するように要求できることを意味するHTTPヘッダー:
- https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Accept-Ranges
- https://datatracker.ietf.org/doc/html/rfc7233
Ubuntu 23.10、カール8.2.1でテストされました。
答え4
私は元の質問が何を意味するのかを知っており、答えは次のとおりです。いいえ wget -c ...
シナリオは次のように説明できます。
# Start mirroring a site
wget -m http://...
# 400MB later wget died or interrupted,
# don't know where it left off, don't care,
# just want to get the remaining 100MB without getting the first 400MB again
wget -nc -r -l inf --no-remove-listing http://...
「-r -l inf --no-remove-listing」オプションは、-Nパラメーターを持たない-mと同じです。すでにハードドライブにある最初の400 MBを保存したくない場合は、-ncパラメータを追加してください。