如何处理在wget中查找文件/目录的多种模式

时间:2018-11-07 19:55:15

标签: unix wget

所以我有一个包含一百万个文件的目录和一个大约10层深度嵌套的5万个目录。从1/10的目录中读取100字节的文件只需要很长时间,因为它必须ftp进入每个目录并执行任何操作。即使实际上没有下载任何内容,它可能也要花费几个小时。

因此,解决我的问题(或尝试中的问题)的一种方法是:

function download() {
  wget -r \
    -c \
    -A $3 \
    -A $2 \
    "$1$2"
}

domain="ftp://domain.com"
path=/foo

download $domain $path $path/*/README*
download $domain $path $path/*/data.xml
download $domain $path $path/*/ARCHIVE_*/*.gz
download $domain $path $path/*/Bar/example.txt
download $domain $path $path/*/Hello/*/world.*.txt

但是这还没有完全起作用,我希望每一行实际上都只是下载这些模式,但是看来我还有更多工作要做。我有很多这样的东西:

Rejecting 'README'
Rejecting 'X_Y_Z.gz'
...

所以我尝试这样做:

download $domain $path \
  $path/*/README*,$path/*/data.xml,$path/*/ARCHIVE_*/*.gz,$path/*/Bar/example.txt,$path/*/Hello/*/world.*.txt

但还是同样的问题。

这里的问题是我如何使这个 one wget命令(这样它不必重新处理整个ftp目录树5次)仅下载文件/目录匹配这些模式。

我尝试将-A更改为-I,它开始下载我不想要的内容:

function download() {
  wget -r \
    -c \
    -I $3 \
    -I $2 \
    "$1$2"
}

我也尝试过this,但它会下载我不想要的内容:

function download() {
  wget -r \
    -c \
    --accept-regex $3 \
    "$1$2"
}

domain="ftp://domain.com"
path=/foo

download $domain $path \
  $path/.*/README.*,$path/.*/data.xml,$path/.*/ARCHIVE_.*/.*.gz,$path/.*/Bar/example.txt,$path/.*/Hello/.*/world..*.txt

0 个答案:

没有答案