我有一堆文件夹和文件:
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)会变得更长或更小,因为它们经常被修改。然后有一个Images文件夹,其中包含许多包含图像的子文件夹。这些图像将被删除并添加。它们不需要保存在单个文件夹中,我们可以将它们全部放在一个文件夹中。
每小时,我想运行一个cron作业,它将使用bash脚本将所有这些复制到我的FTP服务器。如果有新图像,请发送。如果2-4个文件发生变化,请发送它们并重命名它们(可能是按日期时间)。
我们可以使用FTP / SSH / SCP / SFTP。我没有偏好。
答案 0 :(得分:0)
假设您的本地主机上有一个名为MyLocalFolder
的文件夹,并且在远程服务器上有一个名为MyRemoteFolder
的副本,那么您已更新MyLocalFolder
,并且您需要保留{的内容{1}}与MyRemoteFolder
保持同步。我认为在这种情况下最好的选择是使用MyLocalFolder
并选择更新(修改或新文件)
rsync
有关更多信息,请查看rsync -avu /path/to/MyLocalFolder/. -e 'ssh -p ssh_port' user@remote_server_ip:/path/to/MyRemoteFolder
命令
编辑:如果您需要更新远程文件夹而不删除从本地删除的文件,您可以按照此示例(并首先尝试以确保其按预期工作)
MyLocalFolder包含: file1 file2 file3 file4 file5 file7 file8
MyRemoteFolder包含: file1 file2 file3 file4 file5 file6
为了在不删除file6的情况下使用新更改更新MyRemoteFolder:
rsync
这会给你以下输出
diff MyLocalFolder MyRemoteFolder
- 让我们生成一个包含仅在
Only in MyLocalFolder: file7
Only in MyLocalFolder: file8
Only in MyRemoteFolder: file6
MyRemoteFolder
diff MyLocalFolder MyRemoteFolder | grep 'MyRemoteFolder' | awk '{print $4}' > dont-remove-these-files.txt
上述命令仅传输已修改的文件和新文件,并忽略任何删除文件。
我只在本地计算机上测试了这些步骤并且它正常工作。但我没有机会尝试使用远程服务器。以下网址有关于How to use diff through ssh的问题,然后将所有必要步骤添加到bash脚本并使用cron运行。
如果您需要备份。您可以再次使用该列表从远程文件夹备份已删除的文件,也可以将它们移动到另一个文件夹或其他内容。
我希望这个答案足以满足您的需求。