使用 FTP(唯一选项)在 linux 中使用单行命令同步目录中的文件
Posted
技术标签:
【中文标题】使用 FTP(唯一选项)在 linux 中使用单行命令同步目录中的文件【英文标题】:use FTP (only option) to sync files in a directory with a single line command in linux 【发布时间】:2021-11-17 22:36:45 【问题描述】:我需要将我计算机中的文件与我只有 FTP 访问权限的服务器同步,我希望在 crontab 中添加一行,每天检查新文件或更新文件是否被传输(覆盖)。
这个问题在几年前就被问过了,但没有简单的答案,我想知道今天是否有比ncftput
、wput
等不允许的更好的解决方案
ncftpput -R -z -u "USER" -p "PASS" webxx.at /dir/ /source/
据传可以工作,但-z
开关似乎是“标签”使用的。我的实验似乎表明检查时间不可靠。
【问题讨论】:
【参考方案1】:只需将此代码放入文件 FtpSync.sh
并将此文件添加到您的 crontab 中。
您可以调整文件中的参数。我试图创建“说话”参数,以便他们解释自己。
调用此脚本将下载或上传文件(取决于参数CopyServerdataToLocal
)。如果你想两者都做,只需使用不同的参数启动脚本两次(或创建两个脚本文件)。
FtpSync.sh
#!/bin/bash
# Michael Hutter, 20.11.2021
# This Script can be used to synchronize a remote FTP directory and a local directory
HOST='ftp.mywebspace.de'
USER='web1234567f1'
PASS='YourSecretPwd'
SERVERFOLDER='/FolderOnWebspace'
PCFOLDER='/home/michael/ftpsync/MyLocalFolder'
CopyMoreThanOneFileSimultaneously="--parallel=10"
CopyServerdataToLocal=1 # 0=Upload, 1=Download
IgnoreSubdirectories=1
ContinuePartiallyTransmittedFiles=0
DontOverwriteNewerExistingFiles=0 # If this is used ContinuePartiallyTransmittedFiles will not work!
DeleteAdditionalFilesInDestinationDir=0 # Deletes files in DestDir which are not present in SourceDir
RemoveSourceFilesAfterTransfer=0 # Moves the files instead of copying them
ExcludeParams='--exclude-glob .* --exclude-glob .*/' # Exclude (hidden) files and direcories -> starting with a dot
OnlyShowChangesButDontChangeFiles=0 # DryRun mode
OutputAsMuchInfoAsPossible=1 # Verbose mode
################################################################################
if [ $CopyServerdataToLocal -eq 1 ]; then
if [ $OutputAsMuchInfoAsPossible -eq 1 ]; then
echo "Modus=Download"
fi
DIRECTORIES="$SERVERFOLDER $PCFOLDER"
else
if [ $OutputAsMuchInfoAsPossible -eq 1 ]; then
echo "Modus=Upload"
fi
REVERSE='--reverse'
DIRECTORIES="$PCFOLDER $SERVERFOLDER"
fi
if [ $IgnoreSubdirectories -eq 1 ]; then
IGNORESUBDIRS='--no-recursion'
fi
if [ $ContinuePartiallyTransmittedFiles -eq 1 ]; then
CONTINUEFILES='--continue'
fi
if [ $DontOverwriteNewerExistingFiles -eq 1 ]; then
ONLYNEWER='--only-newer'
fi
if [ $DeleteAdditionalFilesInDestinationDir -eq 1 ]; then
DELETE='--delete'
fi
if [ $RemoveSourceFilesAfterTransfer -eq 1 ]; then
REMOVE='--Remove-source-files'
fi
if [ $OnlyShowChangesButDontChangeFiles -eq 1 ]; then
DRYRUN='--dry-run'
fi
if [ $OutputAsMuchInfoAsPossible -eq 1 ]; then
VERBOSE='--verbose'
fi
lftp -f "
open $HOST
user $USER $PASS
lcd $PCFOLDER
mirror $DRYRUN $REVERSE $IGNORESUBDIRS $DELETE $REMOVE $CONTINUEFILES $ONLYNEWER $CopyMoreThanOneFileSimultaneously --use-cache $ExcludeParams $VERBOSE $DIRECTORIES
bye
"
【讨论】:
这个网站帮助我创建了那个脚本:cyberciti.biz/faq/lftp-mirror-example(见A complete list of lftp mirror command options
)以上是关于使用 FTP(唯一选项)在 linux 中使用单行命令同步目录中的文件的主要内容,如果未能解决你的问题,请参考以下文章
linux 中 使用 cp -rf /mnt/Server* /var/ftp/pub 时 添加啥选项可以忽略提示的yes