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