linux 如何让我的脚本继续镜像它停止的地方?

ee7vknir  于 2023-02-18  发布在  Linux
关注(0)|答案(2)|浏览(98)

我正在创建一个脚本来下载和镜像一个站点,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选项,脚本也不会在中止后恢复。
zbwhf8kr

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命令可以帮助您,请参阅我的示例:

sed -n "1,$total_mirrored p" to_mirror.txt >> mirrored.txt && sed -i "1,$total_mirrored d" to_mirror.txt

通过在终端中运行man sed,您可以了解很多关于sed命令的信息,因此我在这里不解释每个选项的作用,因为它们是多余的。
但要知道:
>>附加现有文件,或者如果目录中不存在具有所提及名称的文件,则创建一个文件。
&& A && B -仅当A成功时才运行B。

zxlwwiss

zxlwwiss2#

wget中的--continue标志将尝试恢复当前目录中的单个文件的下载。请参考wget的手册页以获得更多信息。这是相当详细的。
您需要从脚本先前停止的位置恢复镜像/下载。
所以,这更多的是对脚本的修改,而不是wget中的一些设置。我可以建议一种方法来做到这一点,但请注意,您也可以使用不同的方法。
修改urls.txt文件,使其每行包含一个URL,然后引用以下伪代码:
1.从文件中获取URL
1.如果(URL以内标识#DONE结尾),则继续
1.否则,使用wget命令
1.将内标识#DONE附加到文件中URL的末尾
这样,下次运行脚本时,您就知道从哪个URL继续。所有末尾带有“#DONE”的URL都将被跳过,其余的将被下载。

相关问题