上传更新后的文件 use scp

关于服务器与本地文件同步, 使用md5文件校验,把新的文件上传上去

#!/bin/bash

mk_md5_file() {
    for line in `ls $1`; do
        if [[ -d $line ]]; then
            mk_md5_file $1/$line
        else if [[ $line == "update.sh" ]] || [[ $line == "Makefile" ]]; then
            continue
        fi
            md5sum $1/$line >> .md5
        fi
    done
}


update_to() {
    mv .md5 .md5_old

    mk_md5_file .

    diff -y .md5 .md5_old | while read line ; do
        is_new_or_update=`echo $line | awk '{ print $3 }'`

        if [ $is_new_or_update == '|' ] || [ $is_new_or_update == '<' ]; then
            filename=`echo $line | awk '{ print $2 }'`

            echo "$filename is uploading..."
            scp -B $filename root@127.0.0.1:/usr/share/nginx/www/$filename 2>./.error.log

            EXIT_STATUS=$?

            if [ $EXIT_STATUS -eq 0 ]; then
               continue
            else
                mv .md5_old .md5
                echo "connect error, rollback..."
                break
            fi
        fi
    done

    if [ -f ".md5_old" ]; then 
        rm -f .md5_old .error.log
    fi
}

if [[ `pwd` == "/mnt/d/work/html" ]]; then 
    update_to 
else
    echo 'path error please goto dir "/mnt/d/work/html"'
fi

加上一个Makefile就可以直接使用make了, 妈妈再也不用担心我少上传文件了

.PHONY: update

update:
        -@./update.sh

.PHONY: clean
clean:
        -@rm -f .md5 .md5_old .error.log
<think>好的,我需要回答用户关于如何将本地文件上传到Windows服务器的问题。根据用户提供的引用内容,我需要综合不同的方法,并结合命令行和工具的使用。 首先,用户提到了rz命令,但这是Linux下的工具,属于lrzsz包,适用于通过串口或SSH上传文件。但用户问的是Windows服务器,所以可能需要考虑其他方法,比如使用WinSCP这样的工具,或者Windows自带的命令。 然后,引用中提到了使用WinSCP的脚本方法,通过命令行调用WinSCP.com进行上传。这适用于Windows服务器,因为WinSCP支持SSH协议,而Windows服务器如果开启了SSH服务(比如安装了OpenSSH),就可以用这种方法。需要详细说明如何编写脚本,替换变量,并确保WinSCP安装正确。 另外,引用[3]提到Windows Azure虚机上传文件的方法,可能包括使用Azure门户的上传功能、RDP拖放或PowerShell命令。不过用户的问题是一般的Windows服务器,不是特指Azure,所以可能需要调整这部分内容,比如使用PowerShell的SCP或FTP。 引用[2]提到在Linux下使用scp命令,但Windows下是否有类似的工具呢?可能需要安装OpenSSH客户端,或者在Windows 10及以上版本中启用OpenSSH,这样可以使用scp命令从命令行上传文件。例如,scp本地文件 用户名@服务器IP:目标路径。 此外,还有FTP的方式,如果服务器配置了FTP服务,可以使用命令行工具如ftp或者curl来上传文件。不过FTP的安全性较低,建议使用SFTP或SCP。 用户可能需要分步骤的指导,包括不同方法的适用场景、具体命令示例以及注意事项,比如确保服务器开启了相应的服务,防火墙设置正确等。 需要检查是否有其他方法,比如使用Powershell的Copy-Item命令,但需要配置PSRemoting,这可能比较复杂。或者使用net use映射网络驱动器,然后复制文件,但需要共享文件夹权限。 总结,主要方法可能有: 1. 使用WinSCP的脚本方法(图形界面或命令行) 2. 使用scp命令(需安装OpenSSH客户端) 3. 使用FTP命令行工具 4. 使用PowerShell的相关命令 5. 使用Azure特定方法(如果适用) 需要逐一解释这些方法,给出具体步骤和示例,并引用相关的引用内容。例如,引用[4]中的WinSCP脚本方法,引用[2]中的scp思路(但调整到Windows环境),引用[3]中的Azure方法作为可选方案。 同时,要注意用户可能需要命令行或工具,所以图形界面的方法可能作为补充。例如,WinSCP有图形界面,但用户问题更关注命令行,所以重点放在脚本方法上。 最后,生成相关问题,比如如何自动化上传、如何保障传输安全等,基于回答内容。</think>### 如何将本地文件上传至 Windows 服务器? #### 方法 1:通过 WinSCP 命令行脚本 WinSCP 是一个支持 SFTP 和 SCP 的图形化工具,但其命令行工具 `WinSCP.com` 也支持自动化文件传输。 **步骤**: 1. **安装 WinSCP**:从官网下载并安装。 2. **编写脚本**(示例): ```batch @echo off set WINSCP_PATH="C:\Program Files (x86)\WinSCP\WinSCP.com" set LOCAL_FILE="C:\local\file.zip" set SERVER_ADDRESS=192.168.1.100 set SERVER_USERNAME=admin set SERVER_PASSWORD=your_password set SERVER_DESTINATION=C:\remote\folder %WINSCP_PATH% /command ^ "open sftp://%SERVER_USERNAME%:%SERVER_PASSWORD%@%SERVER_ADDRESS%/" ^ "put %LOCAL_FILE% %SERVER_DESTINATION%" ^ "exit" ``` 替换变量后保存为 `.bat` 文件并运行。此脚本通过 SFTP 协议上传文件[^4]。 #### 方法 2:使用 SCP 命令(需 OpenSSH 客户端) 若 Windows 服务器已启用 OpenSSH 服务(Windows 10+ 内置),可通过 `scp` 命令上传。 **步骤**: 1. **启用 OpenSSH 客户端**(本地机器): - 打开“设置” → “应用” → “可选功能” → 添加“OpenSSH 客户端”。 2. **上传文件**: ```powershell scp C:\local\file.txt admin@192.168.1.100:C:\remote\folder ``` 输入密码后完成传输。类似 Linux 的 `scp` 操作[^2]。 #### 方法 3:通过 FTP 命令行工具 若服务器配置了 FTP 服务,可使用内置的 `ftp` 命令。 **步骤**: 1. **编写脚本**(示例): ```batch @echo off echo open 192.168.1.100 > ftp_script.txt echo admin >> ftp_script.txt echo your_password >> ftp_script.txt echo put C:\local\file.txt C:\remote\file.txt >> ftp_script.txt echo quit >> ftp_script.txt ftp -s:ftp_script.txt ``` 运行后通过 FTP 协议上传(安全性较低,建议内网使用)。 #### 方法 4:使用 Azure 虚机特定方法(适用于云服务器) 若服务器为 Azure 虚机,可通过以下方式: 1. **Azure 门户上传**:在虚机管理界面选择“上传文件”。 2. **PowerShell 命令**: ```powershell Set-AzVMAccessExtension -ResourceGroupName "Group" -VMName "VM" -Name "FileUpload" -FileUri "https://mystorage.blob.core.windows.net/container/file.zip" -Run "powershell.exe -Command Expand-Archive -Path C:\Packages\file.zip -DestinationPath C:\remote" ``` 需结合 Azure 存储服务使用[^3]。 --- ### 注意事项 - **协议选择**:优先使用 SFTP/SCP(基于 SSH,加密传输),避免 FTP 明文传输。 - **权限配置**:确保服务器已启用 SSH/FTP 服务,且防火墙开放相应端口(如 22、21)。 - **自动化安全**:脚本中直接写入密码存在风险,建议使用密钥认证(SCP/WinSCP 均支持)。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值