ダウンロードしたファイルがファイル名の最初の文字を含むサブフォルダに分割されるように、非常に大きなURLリストをダウンロードするにはどうすればよいですか?

ダウンロードしたファイルがファイル名の最初の文字を含むサブフォルダに分割されるように、非常に大きなURLリストをダウンロードするにはどうすればよいですか?

たくさんのファイル(>数千万個)をダウンロードしたいです。各ファイルの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.txt1時間以上かかります。最高フォルダに入れることができるファイルの数。

ダウンロードしたファイルがファイル名の最初の文字を含むサブフォルダに分割されるように、このような大きな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コマンドから出力ディレクトリを選択します。-PGNU実装オプションを使用して、複数のxargs抽出を並列に実行できます。

URLには空白、引用符、またはバックスラッシュが含まれていないと見なされますが、URLにはURIエンコーディング以外のものを含めないでください(curl直接処理してURIエンコーディングを実行できます)。

例の入力が与えられたら、上記のコマンドを実行すると次のようになります。

.
├── 0
│   └── 0wd.pdf
├── a
│   ├── asz.pdf
│   └── axz.pdf
└── b
    ├── b00.pdf
    └── bb0.pdf

おすすめ記事