所以我有一个包含一百万个文件的目录和一个大约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