ファイルのベース名が同じ場合、wgetで特定のファイルタイプを別のファイルタイプよりも優先させたい。
例えば:
foo.oggが利用可能な場合は、ダウンロードしないでくださいfoo.mp3
これまでwgetを使用してクロール/自動ダウンロードする方法(興味がある場合):
wget -Dfoo.com -I /folder/ -r -l 1 -nc -A.ogg,.mp3 http://www.foo.com/folder/
しかし、もちろん、これは私に.mp3と.oggファイルを取得します。何か案は?
「ファイルxが存在する場合はダウンロードし、そうでない場合はファイルy "をダウンロードするには、次のようにします。
wget x || wget y
xが存在する場合、ダウンロードされ、wget
はtrue
を返すため、2番目の部分はスキップされます。 xが存在しない場合、wget
はエラーコード(おそらく8)を返し、式の2番目の部分が評価されます(ダウンロードy)。
ただし、これは再帰的なダウンロードには明らかに役立ちません。 wget
に、このレベルの洗練されたマスキングに対応する機能があるとしたら、私は驚きます。マニュアルページは、どんな形の派手な条件もカバーしていないようです。ただし、わずかに変更されたアプローチでも機能する可能性があります。
(ダウンロードしたいもののリストを作成するようにwget
を説得するのは難しいようです。私の最初のアイデアは、@ utkuerdが提案するように、ダウンロードする前にこれを作成して適切にフィルタリングすることでした。)
出発点は当然、最初にすべてのoggファイルをダウンロードすることです。
wget -Dfoo.com -I /folder/ -r -l 1 -nc -A.ogg -i http://www.foo.com/folder/
--reject
リストとして提供する適切なマスクがあれば、残りのmp3ファイルを同じ方法でダウンロードできます。このリストには、ダウンロードしたくないすべてのmp3ファイルの名前が含まれている必要があります。
このリストを次のように作成することをお勧めします
bl=($(find ./ -name '*.ogg' -exec basename -s .ogg {} \+ | sed 's/\(^.\+$\)/\1.mp3/' ) )
これで、ブロックするmp3ファイルのbash配列ができました。
ブロックされていないmp3ファイルのみをダウンロードするには、
IFS=','; wget -Dfoo.com -I /folder/ -r -l 1 -nc -A.mp3 -R"${bl[*]}" -i http://www.foo.com/folder/; unset IFS
IFS
変数は、リストがスペースで区切られないように変更する必要があります。
明らかに、oggファイルのリストがgetconf ARG_MAX
より長い場合(wgetコマンドが壊れます)、またはファイル名に空白が含まれている場合(ブロックリストが壊れて、追加のファイルと(ありそうもない)ファイルがありません)。どちらも修正可能です。
拒否リストの余分なコンマは興味深いの結果を与えることに注意してください。
(以下のコメントを参照)
でoggファイルを取得した後
wget -Dfoo.com -I /folder/ -r -l 1 -nc -A.ogg -i http://www.foo.com/folder/
あなたはそのようにダミーのmp3ファイルを作成することができます
find ./ -name '*.ogg' | sed 's/ogg$/mp3/' | xargs -d '\n' touch
残りのmp3ファイルを(-nc
を利用して)取得します
wget -Dfoo.com -I /folder/ -r -l 1 -nc -A.mp3 -i http://www.foo.com/folder/
余分なmp3ファイルは次のようなもので削除することができます
find ./ -name '*.mp3' -size 0 -exec rm '{}' \+
これが名前のスペースで機能することをテストしました。
-wgetのオプションには、与えられたファイル名パターンの中から賢く選択する力があるとは思いません。ほとんどの場合、必要なことを実現するためのスクリプトが必要です。ディレクトリリストを取得し、自分で解析してから、必要なファイルをダウンロードする必要があります。
ダウンロードして破棄する.pngファイルの場合、-iフラグを誤って使用しました。 -iフラグは、ダウンロードするURLを含むファイル(またはURL)を指定します。フラグなしで開始点を指定する必要があります。 -iフラグを削除すると、他のファイルタイプはダウンロードされず、.ogg、.mp3、および必要なhtmlファイルのみがダウンロードされます。 htmlファイルは後で破棄されます。