適切なパスとイメージ名を含む新しいアイテムのXMLフィードを送信するベンダーがあります。イメージのURLパスを削除するスクリプトを作成しましたが、wgetを使用してそのパスを取得しようとするとプロトコルエラーが発生します。他の同様のツールを使用してもwget -i list.txt
問題ありません。この問題の原因は何ですか?最高のアドバイスは何ですか?
答え1
私の考えにはこれがうまくいくと思います。
grep -oP "http:\//[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(:[a-zA-Z0-9]*)?/?([a-zA-Z0-9\-\._\?\,\'/\\\+&%\$#\=~])*.jpg" inputfile | xargs -n1 wget
または、リストがあれば使用できます。
cat list.txt | xargs -n1 wget
答え2
入力サンプルと少なくともスクリプトのコアを見なくても、URLが悪意のあるSpace Snowmanによって破損していると推測できます。彼らはこの種の無責任な行動で悪名高い。唯一の希望は、エリア51テクニカルサポートに電話することです。
あるいは、ここで例とスクリプトを提供することもできます。これはクレイジーな考えですが、役に立つかもしれません。必要に応じて匿名化または難読化しますが、XMLファイルの構造を台無しにしないでください。
私はあなたが単純な正規表現を使用していると思い、通常は正規表現を使用してXMLを「解析」するのは良い考えではないことを指摘しています。これは壊れやすく有効ですが、予期しない入力によって簡単に混乱する可能性があります。 xml解析ライブラリ、関数、または同様のツールXML2XMLファイルからURLを抽出します。
また、Deer Hunterが上記で示したように、URLにシェルに特別な意味を持つスペースや句読点文字(たとえば、、、などの複数の文字)が含まれている場合は、&
URL?
を*
使用する前にURLを引用またはエスケープする必要があります。 wget URLコマンドライン。非常に簡単な例として、$ URL変数の周りに二重引用符を書き留めてwget "$URL"
ください。wget $URL
答え3
何度も検討したところ、ネットワークに問題があることがわかりました。 wgetスクリプトは他のサイトからダウンロードしたリンクに対して機能し、jdownloaderなどのウィンドウベースのツールを使用します。何らかの理由で、Linuxベースの当事者はベンダーのNT Webサーバーにアクセスできません。 winbindをインストールしましたが、ネットワークが正しく確認されます。