shell判断文件是否发生变化

公司有需求,要通过检测文件是否变化来判断是否进行发布操作,文中给出了相应判断代码。

公司有个需求,通过检测文件是否变化,而判断是否进行发布操作,

以下为判断代码

#!/bin/bash
# 检测的文件
package=/data/file.index
# 记录 md5值的文件
md5=package_md5
# 创建新的md5信息
package_md5_new=$(md5sum -b $package | awk '{print $1}'|sed 's/ //g')

# 创建md5的函数
function creatmd5()
{
        echo $package_md5_new > $md5
}

# 判断文件是否存在
if [ ! -f $md5 ] ; then
        echo "md5file is not exsit,create md5file......."
        creatmd5
        exit
fi

# 读取旧的md5信息
package_md5_old=$(cat $md5|sed 's/ //g')

echo $package_md5_new
echo $package_md5_old

# 对象对比判断
if [ "$package_md5_new" == "$package_md5_old" ];then
        echo "md5 is not changed"
        docker restart saas
else
        echo "md5 is  changed"
        creatmd5
        bash ~/fabu.sh
fi



### 使用Shell脚本检测文件下载是否完成的方法 在使用Shell脚本检测文件是否下载完成时,可以结合以下方法实现。通常需要判断文件是否存在、文件大小是否发生变化或通过特定工具(如`wget`或`curl`)的返回状态码来确认下载是否成功。 #### 方法一:通过文件大小判断 可以通过检查文件大小是否发生变化判断文件是否下载完成。如果文件大小不再变化,则可以认为下载已完成。 ```bash #!/bin/bash file="downloaded_file.txt" # 下载的目标文件名 timeout=60 # 超时时间(秒) # 检查文件是否存在 if [ ! -f "$file" ]; then echo "文件不存在,下载未开始。" exit 1 fi # 获取初始文件大小 initial_size=$(stat --format=%s "$file") # 等待一段时间后再次检查文件大小 sleep 5 final_size=$(stat --format=%s "$file") # 判断文件大小是否发生变化 if [ "$initial_size" -eq "$final_size" ]; then echo "文件下载已完成。" else echo "文件正在下载中..." fi ``` 此方法适用于文件下载过程中文件大小会逐步增加的情况[^1]。 #### 方法二:通过`wget`或`curl`的状态码判断 `wget`和`curl`等工具在执行下载任务时会返回状态码。如果状态码为0,则表示下载成功;否则表示下载失败或未完成。 以下是使用`wget`检测文件下载是否完成的示例: ```bash #!/bin/bash url="http://example.com/file.zip" # 下载链接 output_file="file.zip" # 输出文件名 # 使用wget下载文件检查返回状态码 wget -q --spider "$url" if [ $? -eq 0 ]; then wget -O "$output_file" "$url" if [ $? -eq 0 ]; then echo "文件下载已完成。" else echo "文件下载失败。" fi else echo "URL不可用或文件不存在。" fi ``` 上述脚本首先使用`wget --spider`检查URL是否可用,然后尝试下载文件并根据返回状态码判断下载是否成功[^4]。 #### 方法三:循环检测文件是否存在 如果下载完成后会生成目标文件,可以通过循环检测文件是否存在来判断下载是否完成。 ```bash #!/bin/bash file="downloaded_file.txt" # 下载的目标文件名 timeout=60 # 超时时间(秒) # 循环检测文件是否存在 for ((i=0; i<timeout; i++)); do if [ -f "$file" ]; then echo "文件已下载完成。" exit 0 fi sleep 1 done echo "文件下载超时,未完成。" exit 1 ``` 此方法适用于下载完成后会生成目标文件的场景[^3]。 #### 方法四:结合压缩包处理 如果下载的是压缩包文件,可以在下载完成后检查压缩包是否解压成功。 ```bash #!/bin/bash archive="file.zip" # 压缩包文件名 extract_dir="extracted_files" # 解压目录 # 检查压缩包是否存在 if [ ! -f "$archive" ]; then echo "压缩包文件不存在,下载未完成。" exit 1 fi # 解压压缩包 unzip -o "$archive" -d "$extract_dir" if [ $? -eq 0 ]; then echo "压缩包解压成功,文件下载完成。" else echo "压缩包解压失败,可能下载未完成。" exit 1 fi ``` 此方法适用于下载的是压缩包文件,并需要进一步验证解压是否成功的场景[^1]。 ### 注意事项 - 如果下载过程中出现网络中断或其他异常情况,可能需要额外的错误处理逻辑。 - 对于大文件下载,建议设置合理的超时时间以避免无限等待。 - 在生产环境中,可以结合日志记录功能对下载过程进行监控和排查问题。
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值