使用lftp获取继续行为(不是重新加载已存在的文件)。

时间:2012-05-23 18:39:58

标签: bash lftp

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

#!/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

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

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分: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

它的作用:

  • 我构建了一个本地文件列表,然后使用变量$files在ftp服务器上mget所有这些文件。
  • 我用dir替换了锁文件:搜索关于原子性的网页。
    文件不是原子的,而目录是。
  • 陷阱在正常退出和其他信号上运行
  • 如果您使用bash,[[ ]]测试更强大。
  • 缩进不仅仅是一种选择;)

答案 2 :(得分:0)

如果你只是在追踪文件(不是播种),你可以使用lftp mirror with --Remove-source-files选项在传输后从源文件中删除文件(所以没有重复,重新下载)。