使用Bash将文件夹中的新文件和修改后的文件上载到服务器

使用Bash将文件夹中的新文件和修改后的文件上载到服务器,bash,shell,ssh,ftp,scp,Bash,Shell,Ssh,Ftp,Scp,我有一堆文件夹和文件: file1.txt file2.db file3.csv Images/AA/BB/ABCDEFEFERFERGE/img_201553.jpg Images/DD/CC/DFGDGDSGSFGDSGD/img_345213.jpg Images/FF/EE/DFGSGGDSFGERERW/img_342311.jpg 大约有3个文件(+-1)会变长或变小,因为它们经常被修改。然后是一个图像文件夹,其中有许多包含图像的子文件夹。这些图像将被删除和添加。它们不需要保存在单

我有一堆文件夹和文件:

file1.txt
file2.db
file3.csv
Images/AA/BB/ABCDEFEFERFERGE/img_201553.jpg
Images/DD/CC/DFGDGDSGSFGDSGD/img_345213.jpg
Images/FF/EE/DFGSGGDSFGERERW/img_342311.jpg
大约有3个文件(+-1)会变长或变小,因为它们经常被修改。然后是一个图像文件夹,其中有许多包含图像的子文件夹。这些图像将被删除和添加。它们不需要保存在单独的文件夹中,我们可以将它们全部放在一个文件夹中

每小时,我都想运行一个cron作业,该作业将使用bash脚本将所有这些内容复制到我的FTP服务器。如果有新图像,请发送它。如果2-4个文件发生更改,请发送并重命名它们(可能按日期和时间)


我们可以使用FTP/SSH/SCP/SFTP。我没有偏好

假设您在本地主机上有一个名为
MyLocalFolder
的文件夹,在远程服务器上有一个名为
MyRemoteFolder
的副本,然后您已经更新了
MyLocalFolder
,您需要使用
MyLocalFolder
使
MyRemoteFolder
的内容保持最新。我认为在这种情况下,最好的选择是使用
rsync
和更新(修改或新文件)选项

rsync-avu/path/to/MyLocalFolder/-e'ssh-p ssh\u端口'user@remote_server_ip:/path/to/MyRemoteFolder

有关更多信息,请查看
rsync
命令的手册页

编辑:如果您需要在不删除从本地删除的文件的情况下更新远程文件夹,您可以按照以下示例进行操作(并首先尝试以确保其按预期工作)

MyLocalFolder包含: 文件1文件2文件3文件4文件5文件7文件8

MyRemoteFolder包含: 文件1文件2文件3文件4文件5文件6

要在不删除文件6的情况下使用新更改更新MyRemoteFolder,请执行以下操作:

  • 第一个列表使用以下命令生成存在于MyRemoteFolder上而不在MylocalFolder中的文件列表:
diff MyLocalFolder MyRemoteFolder

这将为您提供以下输出

仅在MyLocalFolder:file7中
仅在MyLocalFolder:file8中
仅在MyRemoteFolder:file6中
-让我们生成一个仅在
MyRemoteFolder

diff MyLocalFolder MyRemoteFolder | grep'MyRemoteFolder'| awk'{print$4}'>不要删除这些文件。txt

  • 将该列表传递给rsync,使其忽略已删除的文件:
rsync-avu--delete--exclude from'don remove this files.txt'MyLocalFolder/。MyRemoteFolder

上述命令将仅传输修改后的文件和新文件,并忽略任何删除文件

我只在本地机器上测试了这些步骤,它工作正常。但我没有机会尝试使用远程服务器。下面的url有一个问题,关于如何将所有必要的步骤添加到bash脚本并使用cron运行它

以防你需要备份。您可以再次使用该列表备份远程文件夹中已删除的文件,方法可能是将其移动到其他文件夹或其他地方


我希望这个答案足以满足你的需要

这个问题有点模糊。你到底有什么问题?你在寻找FTP的程序库吗?是的,但是如果一个图像被删除了,我不希望它也被远程删除。它必须是一个备份。