たくさんのファイル(>数千万個)をダウンロードしたいです。各ファイルのURLがあります。私のファイルにURLのリストがありますURLs.txt
。
http://mydomain.com/0wd.pdf
http://mydomain.com/asz.pdf
http://mydomain.com/axz.pdf
http://mydomain.com/b00.pdf
http://mydomain.com/bb0.pdf
etc.
を介してダウンロードできますが、wget -i URLs.txt
1時間以上かかります。最高フォルダに入れることができるファイルの数。
ダウンロードしたファイルがファイル名の最初の文字を含むサブフォルダに分割されるように、このような大きなURLリストをダウンロードする方法は?たとえば、:
0/0wd.pdf
a/asz.pdf
a/axz.pdf
b/b00.pdf
b/bb0.pdf
etc.
それが重要な場合は、Ubuntuを使用してください。
ベストアンサー1
たぶん、次のようなものがあります。
awk -F/ '{print substr($NF, 1, 1), $0}' urls.txt |
xargs -L1 bash -c 'mkdir -p -- "$0" && curl -sSF -O --output-dir "$0" "$1"'
各行の前にawk
ファイル名の最初の文字を追加し、その文字を使用してcurl
コマンドから出力ディレクトリを選択します。-P
GNU実装オプションを使用して、複数のxargs
抽出を並列に実行できます。
URLには空白、引用符、またはバックスラッシュが含まれていないと見なされますが、URLにはURIエンコーディング以外のものを含めないでください(curl
直接処理してURIエンコーディングを実行できます)。
例の入力が与えられたら、上記のコマンドを実行すると次のようになります。
.
├── 0
│ └── 0wd.pdf
├── a
│ ├── asz.pdf
│ └── axz.pdf
└── b
├── b00.pdf
└── bb0.pdf