1

所以,我有一个从种子箱下载东西的脚本。它适用于远程服务器中的新文件,然后镜像到我的本地服务器上。问题是,例如,当我想要删除不必要的文件时,再次运行脚本会再次重新下载相同的文件。我尝试进入 mirror 的手册页,但没有帮助。这是镜像文件的脚本:

#!/bin/bash

login=XXXX
pass=XXXXXX
host=XXXXX
remote_dir=/files/
local_dir=/home/XXX/XXX

trap "rm -f /tmp/seedroots.lock" SIGINT SIGTERM

if [ -e /tmp/seedroots.lock ]; then
   echo "Synctorrent is running already."
   exit 1
else
   touch /tmp/seedroots.lock
   lftp -p 21 -u $login,$pass $host << EOF
   set ftp:ssl-allow no
   set mirror:use-pget-n 5
   mirror -c -P5 --log=synctorrents.log $remote_dir $local_dir

   EOF

   rm -f /tmp/seedroots.lock
   exit 0
fi

是否有一个我缺少的镜像选项不会再次重新下载本地删除的文件?

4

3 回答 3

1

lftp 中的mirror命令有一个--continue标志,它将导致您想要的行为。

于 2012-05-23T20:29:16.020 回答
0

您应该尝试我的脚本版本(未经测试):

#!/bin/bash

login=XXXX
pass=XXXXXX
host=XXXXX
remote_dir=/files/
local_dir=/home/XXX/XXX
files=$local_dir/*

trap "rmdir /tmp/seedroots.lock" 0 1 2 3 15

if [[ -d /tmp/seedroots.lock ]]; then
    echo "Synctorrent is running already."
    exit 1
else
    mkdir /tmp/seedroots.lock

    lftp -p 21 -u $login,$pass $host << EOF
    set ftp:ssl-allow no
    set mirror:use-pget-n 5
    mget $files

    EOF

fi

它能做什么 :

  • 我构建了一个本地文件列表,然后,在 ftp 服务器上使用变量 .mget 所有这些文件$files
  • 我用 dir 替换了 lock 文件:search web about atomicity
    文件不是原子的,而目录是原子的。
  • 陷阱在正常退出和其他信号上运行
  • 如果您使用的是 bash,[[ ]]测试会更强大。
  • 缩进不仅仅是一种选择;)
于 2012-05-23T20:14:44.693 回答
-1

如果您只是在提取文件(而不是播种),则可以使用 lftp 镜像--Remove-source-files选项在传输后从源中删除文件(这样就不会重复,重新下载)。

于 2012-12-29T14:26:11.267 回答