所以我需要构建一个shell脚本(我很垃圾的一项技能,我认为太线性了,把所有东西都变成管道),它将连接到远程机器到一个特定的目录,抓取所有超过5分钟的文件,从中提取信息文件的名称(下面的编码详细信息)并将文件分散到相关目录中,或者如果本地备份主机上不存在这些目录,则创建这些目录。
在十几台机器上,我有一个目录(让我们称之为 /Prod/Data/),其中包含数千个名为 data-HOST-v.7.mmddyy.csv 的文件
示例:date-web2-v.7.052509.csv
超过 5 分钟的文件需要从远程机器拉到本地文件夹 /backup/archive/host/year/month/day/csvs
示例 /backup/archive/web2/2009/05/29/csvs
我确定我可以做类似 ls -1 | 剪切-d"。" -f3 提取文件的日期部分,然后使用 sed 或 awk 隔离每个部分并生成日期变量以选择将文件转储到的目录,执行类似抓取主机的操作,但我不知道如何着手将其与要在其上执行移动的文件相关联。不知道如何远程执行,也许最好先从远程机器上 scp 所有文件(缺少任何小于 5 分钟的文件,也许可以使用 find -mmin +5 语句来解决这个问题?)然后在所有东西都在备份机器上时进行排序。
有人会这么好心地向我指出可能提供类似功能的示例脚本的方向吗?我写的一切都倾向于命令| 命令 | 命令 | 等等......我想这个任务需要一些维度。
感谢您的时间。
纯 Bash 解决方案,使用参数扩展。有关PE 的说明,请参阅此内容。
我可能会为此使用 Perl 并使用括号从正则表达式中捕获我想要的组。
find命令具有根据年龄选择文件的选项。请参阅 -amin、-atime、-cmin、-ctime、-mmin 和 -mtime 选项。
您可以使用 find 来构建您需要移动的文件列表,将其存储到文件中,然后在带有 --include-from= 和 --remove-source-files 选项的 rsync 命令中使用它。
为了将来参考,这是我想出的脚本:
它可能与原始帖子中的目标/规格不一致,但它适用于我的具体情况。