いくつかのWebディレクトリをローカルディスクに保存する~/.bashrc
関数を作成しました。 Webサイトに存在しない不要なインデックスファイルを除いて、正常に機能します。私はそれを次のように使用します
crwl http://ioccc.org/2013/cable3/
ただし、index.html?C=D;O=A index.html?C=D;O=D index.html?C=M;O=A index.html?C=M;O=D index.html?C=N;O=A index.html?C=N;O=D index.html?C=S;O=A index.html?C=S;O=D
などの一部のファイルも取得します
完全なファイルリスト:
kenn@kenn:~/experiment/crwl/ioccc.org/2013/cable3$ ls
bios index.html?C=D;O=A index.html?C=S;O=A screenshot_flightsim4.png
cable3.c index.html?C=D;O=D index.html?C=S;O=D screenshot_Lotus123.png
fd.img index.html?C=M;O=A Makefile screenshot_qbasic.png
hint.html index.html?C=M;O=D runme screenshot_simcity.png
hint.text index.html?C=N;O=A sc-ioccc.terminal screenshot_win3_on_macosx.png
index.html index.html?C=N;O=D screenshot_autocad.png
wget
を使用してそのディレクトリを複製するときにこれらのファイルを除外したいのですが、Webディレクトリをそのまま複製するwget
スイッチまたはトリックはありますか?
.bashrc
のスクリプト関数:
crwl() {
wget --tries=inf --timestamping --recursive --level=inf --convert-links --page-requisites --no-parent "$@"
}
編集:2つの可能な回避策を見つけました
1)-R index.html?*
フラグの追加
2)-R =A,=D
を除くindex.html?C=D;O=A
ファイルを拒否するindex.html
フラグを追加する
どちらが適切かはわかりませんが、どちらも安全ではないようです。
Wgetの削除メカニズムを使用したくない場合、またはこのオプションをサポートしていないシステム上にいる場合は、ダウンロード後にこれを試してください。
FIND=$($WHICH find)
PWD2=$($WHICH pwd)
SH=$($WHICH sh)
ECHO=$($WHICH echo)
LESS=$($WHICH less)
コマンド:
$FIND "$($PWD2)" -regextype posix-egrep -type f -regex '^(.*?html\?C=[DNSM];O=[AD])$' -exec "$SH" -c 'o="{}";$ECHO -f -v "${o}"' \; | $LESS
出力に満足したら、次の手順を実行します。
(ファイルシステム全体を削除する場合、私は責任を負いません。したがって、この方法です。)
RM=$($WHICH rm);export RM
$FIND "$($PWD2)" -regextype ... ;$RM -f -v "${xox}"' \;
お役に立てれば。
他の種類のindex.html?C=...
ファイルを除外せずにURL index.html*
のようなインデックスソートファイルを除外するには、実際により正確な指定が可能です。試してください:-R '\?C='
別の空のディレクトリを設定します、例えば
$ mkdir ~/experiment2
$ cd ~/experiment2
次に、1ページの簡単なテストを行うために、再帰とレベルを使用せずに、コマンドの短いバージョンを作成します。
$ wget --tries=inf --timestamping --convert-links --page-requisites --no-parent -R '\?C=' http://ioccc.org/2013/cable3/
Wgetが完了すると、~/experiment2
にはindex.html?C=...
ファイルがなくなります。
.
└── ioccc.org
├── 2013
│ └── cable3
│ └── index.html
├── icons
│ ├── back.gif
│ ├── blank.gif
│ ├── image2.gif
│ ├── text.gif
│ └── unknown.gif
└── robots.txt
4 directories, 7 files
したがって、他のすべてのindex.htmlディレクトリ、この場合はただindex.html?C=...
を保持しながら、実際にこれらの冗長なインデックスソートindex.html
ディレクトリを除外しました
したがって、-R '\?C='
のシェル関数を更新して、~/.bashrc
を実装するだけです。
crwl() {
wget --tries=inf --timestamping --recursive --level=inf --convert-links --page-requisites --no-parent -R '\?C=' "$@"
}
次に、新しいターミナルでテストするか、bashを再ソースして有効にすることを忘れないでください。
$ . ~/.bashrc
次に、比較のために新しいディレクトリで試してください:
$ mkdir ~/experiment3
$ cd ~/experiment3
$ crwl http://ioccc.org/2013/cable3/
wget -V
が1.13である場合、これは機能しない可能性があり、これらの厄介なindex.html?C=...
を実際に削除するか、wgetの最新バージョンを取得する必要があります。-R
またはパターンを拒否するように指定することで機能します。この場合、?C=
のindex.html?C=...
バージョンに典型的なindex.html
パターンを持つページです。?
はたまたまwgetワイルドカードであるため、リテラル?
と一致させるには、\?
としてエスケープする必要があります。index.html?C=
ファイルになります。 wgetを終了させた場合のみ、wgetは-R
仕様に従い、一時的にダウンロードされたindex.html?C=...
ファイルを削除します