私はwgetを使用してウェブサイトをミラーリングしています。サーバーには、find /
コマンドのダンプがあり、次の形式のファイル名が含まれています。
/dir1/ /dir1/page1.txt /dir1/page2.txt ...
ミラーリングは非常に大きく(100GB以上)、find
のローカル出力をサーバー側のダンプを含むテキストファイルと比較して、残っているファイルの数を把握したいと思います。
grep -v ...
またはawk
を使用することを考えていましたが、それをどのように実行するかはよくわかりません。
誰か助けてくれませんか?
ありがとう!
これはcomm
で行うことができます(bash
プロセス置換を使用):
comm -13 <(find / | sort) <(sort server_dump)
これにより、サーバーに固有のファイルが表示されます。ローカルシステムに固有のファイルの場合:
comm -23 <(find / | sort) <(sort server_dump)
-xdev
オプションを追加して、/proc
や/sys
などの他のファイルシステム上のファイルを比較できないようにすることもできます。
wget's
再帰ダウンロードオプションを使用する必要はないと思います。すでにダウンロードが必要なファイルのリストがあるからです。
wget --input-file=./path/to/your/list --base=URL
このようにすると、最初にリストに従うだけなので、ダウンロードされたすべてのファイルがリストの次のファイルになります。したがって、最後にダウンロードしたファイルとリスト内のその位置を確認するだけで、いつでも進捗状況を確認できます。
しかし、それが機能しない場合:
{ find . ; sed 's/.*/.&/' list.file ; } |
sort | uniq -u
find
の出力を両方のホストのファイルにダンプしてから、2つのファイルでdiff
を実行しないのはなぜですか?ファイルの数を取得するには、wc
を使用してカウントできます。
サーバーで利用可能なSSHアクセスがあるかどうかは質問からは明らかではありません。ある場合は、ジョブにrsync
を使用します。