Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 使用lftp获取继续行为(不重新下载已存在的文件)。_Bash_Lftp - Fatal编程技术网

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

Bash 使用lftp获取继续行为(不重新下载已存在的文件)。,bash,lftp,Bash,Lftp,所以,我有一个脚本可以从种子盒下载东西。它适用于远程服务器中的新文件,然后在本地服务器上镜像。问题是,例如,当我想要删除不必要的文件时,再次运行脚本会再次重新下载相同的文件。我试着进入镜子的手册页,但没有帮助。以下是镜像文件的脚本: #!/bin/bash login=XXXX pass=XXXXXX host=XXXXX remote_dir=/files/ local_dir=/home/XXX/XXX trap "rm -f /tmp/seedroots.lock" SIGINT SI

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

#!/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
#/bin/bash
登录名=XXXX
通过=XXXXXX
主机=XXXXX
远程目录=/files/
本地目录=/home/XXX/XXX
陷阱“rm-f/tmp/seedroots.lock”SIGINT SIGTERM
if[-e/tmp/seedroots.lock];然后
echo“Synctorrent已在运行。”
出口1
其他的
touch/tmp/seedroots.lock

lftp-p21-u$login,$pass$host您应该尝试一下我的脚本版本(未测试):

#/bin/bash
登录名=XXXX
通过=XXXXXX
主机=XXXXX
远程目录=/files/
本地目录=/home/XXX/XXX
文件=$local\u dir/*
陷阱“rmdir/tmp/seedroots.lock”01 2 3 15
如果[-d/tmp/seedroots.lock]];然后
echo“Synctorrent已在运行。”
出口1
其他的
mkdir/tmp/seedroots.lock

lftp-p 21-u$login,$pass$hostlftp中的
mirror
命令有一个
--continue
标志,它将导致您想要的行为。

如果您只是在提取文件(而不是种子设定),您可以使用lftp mirror和
--Remove source files
选项在传输后从源位置删除文件(因此不会重复、重新下载).

是否希望脚本从远程服务器下载文件,但忽略已在本地删除的文件?如果是这样,我想这将很难实现。除非您可以依赖修改时间,否则脚本将无法区分您在本地删除的文件和从未下载的文件之间的差异。要实现这一点,您可能需要构建一个“已看到”文件的本地列表并忽略这些文件。这更像是一个关于lftp的问题,而不是一般的bash或ftp,并且可能应该被标记为lftp(在摘要中描述了这一点)。既然您将文件存储为非数组变量,那么这种方法在文件名包含空格时会失败吗?此外,您正在计算本地列表,但随后获取它们,而不是将它们放入。。。你不需要远程列表来获取吗?
#!/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