Из man wget
видно, что он использует обычное соглашение о возвращаемом значении Unix - 0 означает отсутствие ошибки, все остальное является ошибкой. При условии, что вы не ожидаете других видов ошибок (например, сбой сети или тому подобное), то есть вы ожидаете, что если он не загружает ничего, что означает, что нет файла, вы можете использовать что-то вроде этого:
get_tf_simulated() {
t=$1
if [ $t -lt 3 ]; then
f=$3
s=$((2 * $t))
if [ $f -lt $s ]; then
return 0
fi
fi
return 1
}
get_tf_real() {
tp=$2
fp=$4
inf=$5
ext=$6
# Get http://example.com/test<test number>/<image or file><file number>.<jpg or txt>
wget -Otest$tp_file$fp_$inf.$ext http://example.com/test$tp/$inf$fp.$ext
}
get_tf() {
echo --- Getting $*
get_tf_simulated $*
#get_tf_real $*
}
get_all() {
get_tf $t $tp $f $fp image jpg
ret_val=$?
if [ $ret_val -ne 0 ]; then
return $ret_val
fi
get_tf $t $tp $f $fp file txt
}
for t in {1..999}; do
tp=`printf %3.3d $t`
got_one=no
for f in {1..9999}; do
fp=`printf %4.4d $f`
get_all $t $tp $f $fp
if [ $? -ne 0 ]; then
echo Failed, going next
break
fi
got_one=yes
done
if [ $got_one == 'no' ]; then
echo Nothing more
break
fi
done
Раскомментируйте правую строку в функции get_all
. В настоящее время он будет имитировать его, и вывод будет таким (при условии, что вы сохранили вышеупомянутое в mkt.sh
):
$ ./mkt.sh
--- Getting 1 001 1 0001 image jpg
--- Getting 1 001 1 0001 file txt
--- Getting 1 001 2 0002 image jpg
Failed, going next
--- Getting 2 002 1 0001 image jpg
--- Getting 2 002 1 0001 file txt
--- Getting 2 002 2 0002 image jpg
--- Getting 2 002 2 0002 file txt
--- Getting 2 002 3 0003 image jpg
--- Getting 2 002 3 0003 file txt
--- Getting 2 002 4 0004 image jpg
Failed, going next
--- Getting 3 003 1 0001 image jpg
Failed, going next
Nothing more
Заметьте, что я не тестировал wget
, но вы можете использовать это для тестирования пары файлов:
wget -Otest$tp_file$fp_$inf.$ext http://example.com/test$tp/$inf$fp.$ext; echo $?
Просто замените $tp
, $fp
, $inf
и $ext
мере необходимости, например, для примера, подобного тому, что вы дали:
wget -Otest052_file0001_file.txt http://www.example.com/sub-somewhere052/file0001.txt; echo $?
Это должно повторить 8
для 404, от man wget
:
8 Server issued an error response.
Если это работает, то сценарий должен работать, надеюсь, что в этой строке нет опечаток. :)