PowerShell复制文件场景模拟,实现cp -rf效果
powershell作为Windows的脚本语言,有时候还是需要用到的,下面就记录一下如何使用Powershell的复制功能
在powershell中,复制的命令是:
Copy-Item
下面就演示一下相关场景下的使用
1、复制单文件
语法如下:
Copy-Item <源文件> <备份文件>
例如:
Copy-Item .\Y.ico X.ico
2、复制相同后缀的文件到另一个文件夹
这个需要使用通配符:
*
语法:
Copy-Item *.<后缀名> <新的文件夹>
例如:
Copy-Item *.ico .\ico\
复制ico后缀名的文件到ico文件夹
3、复制文件夹及递归目录、文件
也就是linux上
cp -rf
的一个功能,语法如下:
Copy-Item <源文件夹> <新文件夹> -recurse -force
例如:
Copy-Item .\ico\ ico_bak -recurse -force
实现cp -rf效果
为啥写这篇文章
因为太多垃圾教程了,不得不写,例如:
下面这个一看就是直接谷歌翻译的
还有这种花里胡哨的,排版又乱,复制个文件还得上个函数
如果不是他们写的教程太难看,我又何必来写呢
主机基础设施如何使用 Zadig 做持续交付
Zadig 提供了面向容器运行时环境、大规模微服务的云原生持续交付方案,被企业广泛采用,但在企业实际运用过程中,还存在部分服务无法接入的情况,对运维统一化管理造成不便。
常见的无法接入的情况:一部分服务暂时不便于迁移容器或不打算迁移虚拟机/主机部署;或基础设施本身是可网络互通的设备,比如 IoT 物联网场景下自动驾驶车辆主机端,工厂可连接设备等。目前该场景已在小鹏自动驾驶、理想云平台有成熟稳定的应用。
下面我们以 vm-microservice-demo 项目的后端服务 + 基础设施为主机场景为例,来阐述以上场景如何在 Zadig 中实现持续交付。下文会介绍两种常见的接入方式:
方式一:目标部署主机和 Zadig 连通,直接将服务部署到目标主机
方式二:通过堡垒机(一般也称为跳板机)和 Zadig 连通,在堡垒机上将服务部署到目标主机
项目基本配置配置主机
系统管理员访问 系统设置 -> 主机管理 -> 新建,填写主机信息后保存即可。主机资源可以是目标部署主机或堡垒机。
创建项目和服务
以 vm-microservice-demo 项目为例,该项目包含 Vue.js 前端服务 frontend 和 Golang 后端服务 backend,共包括 dev 和 qa 2 个环境。案例源码位于:koderover/zadig/microservice-demo [1],相关文件说明如下:
zadig/examples/microservice-demo├── backend # 后端服务源码├── frontend # 前端服务源码└── vm # 部署相关配置 ├── ansible # 使用 ansible 工具部署的相关配置 │ ├── ansible.Dockerfile # 包含 ansible 工具的镜像 Dockerfile │ └── hosts-dev # 部署 dev 环境的主机信息,端口 22 已开放,可使用 ansible 批量操作 │ └── hosts-qa # 部署 qa 环境的主机信息,端口 22 已开放,可使用 ansible 批量操作 └── restart.sh # backend 服务部署脚本
系统管理员新建主机项目 vm-microservice-demo。
在项目初始化向导第二步中,点击 + 按钮添加服务,填写服务名称 backend。
接下来为 backend 服务配置构建和部署以便后续使用工作流对其进行交付。对于不同的接入方式配置有所不同,下面分开介绍。
方式一:直接部署服务至目标主机
适用:目标主机和 Zadig 连通,使用自动化运维工具快速实现部署相关操作。部署架构
准备工作
在 Zadig 中支持部署工具:以 ansible 为例,Dockerfile 位于案例源码的 vm/ansible/ansible.Dockerfile 文件中,参考 构建镜像 | Zadig 文档 [2] 新增自定义镜像 ansible:amd64。
构建配置
构建配置说明:
操作系统:ansible:amd64
依赖的软件包:go 1.12.9
代码信息:koderover/zadig
添加二进制包存储步骤,存储路径为 $WORKSPACE/backend/$PKG_FILE
通用构建脚本:见如下代码段
#!/bin/bashset -exif [ -e $WORKSPACE/backend ]; then rm -rf $WORKSPACE/backendficp -r $WORKSPACE/zadig/examples/microservice-demo/backend $WORKSPACE/backendcp -rf $WORKSPACE/zadig/examples/microservice-demo/vm/ansible $WORKSPACE/backendcp $WORKSPACE/zadig/examples/microservice-demo/vm/restart.sh $WORKSPACE/backend/restart.shcd $WORKSPACE/backendchmod +x restart.shmake build-backendtar cvf $PKG_FILE backend restart.sh
部署配置
选择本地直连部署,部署脚本如下:
#!/bin/bashset -excd $WORKSPACE/backendansible-playbook main.yaml --extra-vars PKG_FILE=$ARTIFACT -i hosts-${ENV_NAME} -v
方式一:通过堡垒机部署服务至目标主机
适用:对主机服务器有更高的安全审计要求(比如主机在内网),在堡垒机上完成服务部署相关操作,堡垒机和 Zadig 连通。结合一些自动化运维工具将服务部署到目标主机上。
部署架构
构建配置
构建配置说明:
操作系统:ubuntu 20.04
依赖的软件包:go 1.12.9
代码信息:koderover/zadig
添加二进制包存储步骤,存储路径为 $WORKSPACE/backend/$PKG_FILE
通用构建脚本:见如下代码段
#!/bin/bashset -exif [ -e $WORKSPACE/backend ]; then rm -rf $WORKSPACE/backendficp -r $WORKSPACE/zadig/examples/microservice-demo/backend $WORKSPACE/backendcp $WORKSPACE/zadig/examples/microservice-demo/vm/restart.sh $WORKSPACE/backend/restart.shcd $WORKSPACE/backendchmod +x restart.shmake build-backendtar cvf $PKG_FILE backend
部署配置
使用 SSH Agent 远程部署并选择堡垒机,部署脚本如下:
本例中用于 ansible 部署的相关配置文件位于堡垒机 ~/ansible 目录下,请根据实际情况调整。
#!/bin/bashset -ex# 将构建产物复制到堡垒机上scp -P $kr_jumpbox_server_PORT -i $kr_jumpbox_server_PK $ARTIFACT $kr_jumpbox_server_USERNAME@$kr_jumpbox_server_IP:/home/ubuntu/microservice-demo/$ARTIFACT# SSH 登录到堡垒机上,在堡垒机上做服务部署if [ $ENV_NAME = "dev" ]; then ssh -i $kr_jumpbox_server_PK $kr_jumpbox_server_USERNAME@$kr_jumpbox_server_IP 'cd ~/ansible; ansible-playbook main.yml -i hosts/evm/hosts-dev'elif [ $ENV_NAME = "qa" ]; then ssh -i $kr_jumpbox_server_PK $kr_jumpbox_server_USERNAME@$kr_jumpbox_server_IP 'cd ~/ansible; ansible-playbook main.yml -i hosts/evm/hosts-qa'fi
工程师如何使用
配置完毕后,系统会自动创建 2 套环境和 3 条工作流,日常使用中,可以执行工作流部署服务:
编辑工作流,配置 Webhook 触发器,当触发事件发生时会自动执行工作流部署服务:
更多最佳实践
对于更复杂的服务构建配置,可参考 构建镜像 | Zadig 文档 [2]将依赖的工具放进自定义镜像中,缩短构建所需时间。
参考 构建缓存 | Zadig 文档 [3]配置构建缓存,提高构建运行效率,加速服务更新。
参考链接:
[1] https://github.com/koderover/zadig/tree/main/examples/microservice-demo
[2] https://docs.koderover.com/zadig/v1.13.0/settings/custom-image/
[3] https://docs.koderover.com/zadig/v1.13.0/workflow/cache/
Zadig,让工程师更专注创造。赢《致匠心 - 基于 Zadig 落地云原生 DevOps 行业案例 & 故事集 》:相关问答
redhatlinux下cp-rf的-rf详细意思是?-137****0364的回...
redhatlinux下cp-rf的-rf意思是强制递归复制。-r:若给出的源文件是一个目录文件,此时将复制该目录下所有的子目录和文件。-f:覆盖已经存在的目标文...
mac下没法复制文件到/lib目录-ZOL问答
sudocp-rf源文件(或文件夹)/lib/目标文件(或文件夹)输入命令后会提示你输入密码,然后输入你的密码就可以了因为网吧做了下载限制,不让你下载东西(避免误下...
linux如何将搜出来的文件全部拷贝到另一个文件夹?
cp-Rf/home/user1/*/root/temp/将/home/user1目录下的所有东西拷到/root/temp/下而不拷贝user1目录本身。即格式为:cp-Rf原路径/目的路径/cp-...
linux想把mnt的u盘的文件复制到home目录下肿么复制-ZOL问答
cp-rf/mnt/*/home/tmp/将/mnt的所有的文件复制到/home/tmp文件下,前提是/tmp目录存在。如不存在可以mkdir-p/home/tmp你用root用户操作...
linuxcp指令如何复制‘修改时间为一天内的文件’到某个文...
find/yourdir-mtime-1-typef-execcp{}/destdir\;搜索root/a目录下的所有.c文件并将它们移至root/b文件夹:findroo...
胆结石,胆总管结石手术后一直疼痛,安了支架还是疼痛已有三...
有RFCP留下的癜痕?请问是这些原因造成的疼痛吗?应该做什么样的手术才可以信任?
Linux命令又多又杂,新手该如何分类?
cp命令cp是copy的缩写。复制文件或文件夹。cat命令cat是concatenate的缩写。读取文件内容rm命令rm是remove的缩写。用于删除文件或文件夹。常用参数-r....
疑犯追踪里的男男cp名是什么,有他们两的贴吧吗?吧名叫什么?
RF,他俩貌似没贴吧,想看同人文的话随缘居那里有不少,搜RF和POIRF,他俩貌似没贴吧,想看同人文的话随缘居那里有不少,搜RF和POI
大金空调如何分辨几匹?
大金空调多联机的外机匹数的话看型号中间的数字代表匹数,只是约等于,实际匹数要大。举例:大金多联机VRV—P系列,外机型号RPZQ4AAV中间的4代表的是匹数,实际...
Linux批量拷贝命令,把文件1拷贝到当前目录所有文件夹里头去-...
foriin`find.-typed-print`docpfile1$idonerm-rf目录名会把目录名的文件夹删掉,建议使用:rm-rf目录名/*以保留目录...