我正在创建一个脚本来下载和镜像一个站点,URL取自.txt
文件。该脚本应该每天运行几个小时,所以我需要让它继续镜像它停止的地方。
下面是脚本:
# Created by Salik Sadruddin Merani
# email: ssm14293@gmail.com
# site: http://www.dragotech-innovations.tk
clear
echo ' Created by: Salik Sadruddin Merani'
echo ' email: ssm14293@gmail.com'
echo ' site: http://www.dragotech-innovations.tk'
echo
echo ' Info:'
echo ' This script will use the URLs provided in the File "urls.txt"'
echo ' Info: Logs will be saved in logfile.txt'
echo ' URLs are taken from the urls.txt file'
#
url=`< ./urls.txt`
useragent='Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:25.0) Gecko/20100101 Firefox/25.0'
echo ' Mozilla Firefox User agent will be used'
cred='log=abc@123.org&pwd=abc123&wp-submit=Log In&redirect_to=http://abc@123.org/wp-admin/&testcookie=1'
echo ' Loaded Credentails'
echo ' Logging In'
wget --save-cookies cookies.txt --post-data ${cred} --keep-session-cookies http://members.ebenpagan.com/wp-login.php --delete-after
OIFS=$IFS
IFS=','
arr2=$url
for x in $arr2
do
echo ' Loading Cookies'
wget --spider --load-cookies cookies.txt --keep-session-cookies --mirror --convert-links --page-requisites ${x} -U ${useragent} -np --adjust-extension --continue -e robots=no --span-hosts --no-parent -o log-file-$x.txt
done
IFS=$OIFS
脚本的问题:
- 脚本没有通过使其可引用父目录中的文件来正确引用其链接,请告诉我有关情况。
- 即使使用
--continue
选项,脚本也不会在中止后恢复。
2条答案
按热度按时间zbwhf8kr1#
更聪明的解决方法是,使用两个.txt文件,让我们亲切地称之为“to_mirror. txt”和“mirrored. txt”。将每个URL保持在一行中。在脚本中声明一个值为0的 * 变量,例如
total_mirrored=0
,它在我们的代码中将非常重要。因此,每次执行wget
命令时,站点被镜像,将“total_mirrored”变量的值增加+1**。退出循环后,“total_mirrored”将具有任意整数值。然后,您必须从“to_mirror. txt”中提取以下范围内的行:第一行直到“total_mirrored”;然后将其附加到“mirrored.txt”。
然后从文件“to_mirror. txt”中删除范围。
在这种情况下,
sed
命令可以帮助您,请参阅我的示例:通过在终端中运行
man sed
,您可以了解很多关于sed命令的信息,因此我在这里不解释每个选项的作用,因为它们是多余的。但要知道:
>>
附加现有文件,或者如果目录中不存在具有所提及名称的文件,则创建一个文件。&&
A && B -仅当A成功时才运行B。zxlwwiss2#
wget中的
--continue
标志将尝试恢复当前目录中的单个文件的下载。请参考wget的手册页以获得更多信息。这是相当详细的。您需要从脚本先前停止的位置恢复镜像/下载。
所以,这更多的是对脚本的修改,而不是wget中的一些设置。我可以建议一种方法来做到这一点,但请注意,您也可以使用不同的方法。
修改urls.txt文件,使其每行包含一个URL,然后引用以下伪代码:
1.从文件中获取URL
1.如果(URL以内标识#DONE结尾),则继续
1.否则,使用wget命令
1.将内标识#DONE附加到文件中URL的末尾
这样,下次运行脚本时,您就知道从哪个URL继续。所有末尾带有“#DONE”的URL都将被跳过,其余的将被下载。