Bash 在创建文件并删除原始文件时,在远程主机上存储文件的最佳方式是什么?
基本上,我想在创建时将文件移动到另一台服务器,以保留目录结构。我有一个解决方案,它缺乏优雅。而且我觉得我错过了一个显而易见的答案,所以提前谢谢你的帮助,如果这让你感到厌烦,我完全理解 形势 我有一个磁盘空间有限的服务器,我们称之为“微型”和一个存储服务器。Tiny每隔一段时间创建一次文件。我想将它们自动存储在存储服务器上,并在安全的情况下删除原件。我必须保留tiny的目录结构。我事先不知道dir结构是什么样子的。也就是说,所有文件都是在/some/dir/目录中创建的,但其中的su目录是动态创建的。它们应该放在storege服务器上的/other/fold/中,并在/some/dir下保存子目录。例如: /tiny-->上的某些/dir/bla/foo/bar/snap_001a变为存储服务器上的/other/fold/bla/foo/bar/snap_001a。它们都被称为snap_xxxx wgere xxxx是一个四个字母的字母数字字符串 我的老办法 现在我正在考虑循环文件并对其进行scp。一旦scp完成并无误返回,tiny上的文件将使用rm删除 然而,我觉得这是不必要的复杂,而且可能容易出错。我想到了rsync,但当处理单个文件时,没有选项创建目录,如果它们不存在,则创建父目录。有谁有比我更好的主意吗 在这个线程之后,我最终使用了什么 比我使用的版本更新的是take-remove源文件,而不是-remove发送的文件。前者更能说明问题,因为删除的文件更清晰。另外,在实际使用rsync之前,干运行是测试参数的一个很好的选择 感谢Alex Howansky的解决方案和Douglas Leeder的关心 如何让rsync只复制snap_xxxx文件 请参见-include选项 如何更改目录根 只需在命令行中指定它Bash 在创建文件并删除原始文件时,在远程主机上存储文件的最佳方式是什么?,bash,backup,rsync,scp,data-storage,Bash,Backup,Rsync,Scp,Data Storage,基本上,我想在创建时将文件移动到另一台服务器,以保留目录结构。我有一个解决方案,它缺乏优雅。而且我觉得我错过了一个显而易见的答案,所以提前谢谢你的帮助,如果这让你感到厌烦,我完全理解 形势 我有一个磁盘空间有限的服务器,我们称之为“微型”和一个存储服务器。Tiny每隔一段时间创建一次文件。我想将它们自动存储在存储服务器上,并在安全的情况下删除原件。我必须保留tiny的目录结构。我事先不知道dir结构是什么样子的。也就是说,所有文件都是在/some/dir/目录中创建的,但其中的su目录是动态创建
rsync [options] source_dir dest_host:dest_dir
如何在传输到存储服务器后删除Tiny上的原件
请参见-删除源文件选项
如何让rsync只复制snap_xxxx文件
请参见-include选项
如何更改目录根
只需在命令行中指定它
rsync [options] source_dir dest_host:dest_dir
如何在传输到存储服务器后删除Tiny上的原件
请参阅-删除源文件选项。可能类似于:
touch /tmp/start
rsync -va /some/dir/ /other/fold
find /some/dir -type f -not -newer /tmp/start | xargs rm
可能是这样的:
touch /tmp/start
rsync -va /some/dir/ /other/fold
find /some/dir -type f -not -newer /tmp/start | xargs rm
不要rsync单个文件,rsync树的根。它将找出更改的内容,只复制新内容,并自动创建所有子曲面。谢谢,但恐怕更复杂的是:如何让rsync只复制snap_xxxx文件?如何更改目录根?在传输到存储服务器后,如何删除Tiny上的原始文件?不要rsync单个文件,rsync树的根。它将找出更改的内容,只复制新内容,并自动创建所有子曲面。谢谢,但恐怕更复杂的是:如何让rsync只复制snap_xxxx文件?如何更改目录根?在传输到存储服务器后,如何删除Tiny上的原始文件?我想你的意思是-删除源文件?哇,奇怪-删除发送的文件可以正常工作,但没有文档记录。也许这是一个旧的选项,被重命名了,但为了向后兼容而保留了它?在任何情况下我都会更新答案。阅读变更日志,看起来它在2.6.9中被弃用了,但它仍然可以正常工作。看起来不错。另请参见-verbose和-dry run进行测试。我认为您需要说-include='*/'-include='snap'.*'-exclude='*'''.-删除空目录,包括文件夹、snap'.*文件,并排除所有其他内容,以及其中没有snap'.*文件的目录。我想您的意思是-删除源文件?哇,奇怪-删除发送的文件可以正常工作,但没有文档记录。也许这是一个旧的选项,被重命名了,但为了向后兼容而保留了它?在任何情况下我都会更新答案。阅读变更日志,看起来它在2.6.9中被弃用了,但它仍然可以正常工作。看起来不错。另请参见-verbose和-dry run进行测试。我认为您需要说-include='*/'-include='snap'-exclude='*'-prune空目录包括文件夹、snap'.*文件,并排除所有其他内容,以及那些原来没有snap'.*文件的目录。