文件版本比较

服务器上的系统所需要的某些插件的最新版本放在Windows系统上的某个目录下,现在需要比对确认服务器上的目录里是否都是最新的版本

老方法

插件的命名格式cn.com.aaaa.bbbb.cccc_v202108281121.jar,v202108281121是版本号,由于插件很多,靠眼睛去找十分麻烦。

  1. Windows上记住一个插件名称,然后再去看服务器上查找对比;
  2. Windows点击选中一个插件,按F2,然后复制cn.com.aaaa.bbbb.cccc前缀,再去服务器使用命令ls -al|grep cn.com.aaaa.bbbb.cccc,最后进行比较确认。

使用脚本

  1. 获取Windows上所有最新版本插件的名称,把下面脚本保存为.bat文件
@echo off
::*.jar可以控制需要收集的文件类型
dir *.jar > allfilename.txt
set  filename="result.txt"
if exist %filename% del /q %filename%
for /f "skip=5 tokens=4" %%i in (allfilename.txt) do echo %%i >> %filename%
del /q allfilename.txt
echo  "运行结果保存在result.txt"
pause

假设此时服务器上的插件为:

  1. 把result.txt中的文本复制到服务器的插件目录下的filelist.txt文件中,把下面内容保存为.sh脚本,运行
#!/bin/bash
#判断当前目录下是否存在指定文件内给出的文件,不存在则输出提示

# 清空保存结果的文件
filename="not_exsit correct mul_versions error"
for file in $filename;do
   if [ -f $file ];then
   rm -rf $file
   fi
done

# 遍历插件列表进行比对
for file in `cat filelist.txt`;do
    # tmp保存插件前缀,去除版本号,
    # 注意这里cut命令的-d使用_进行前缀和版本号切割
    tmp=$(echo $file| cut -d_ -f 1)
    # 统计拥有tmp前缀的插件数量
    count=$(ls -al|grep $tmp|wc | gawk '{print $1}')
    # 查找结果数量为0,说明不存在该插件
    if [ $count -eq 0 ];then
       echo $file >> not_exsit
    # 查找结果为1,需要进行版本号的比较,确认版本是否正确
    elif [ $count -eq 1 ];then
       if [ -f $file ];then
          echo $file >> correct
       else
          echo $file >> error
        fi
    # 查找结果大于1,说明有多个版本,需要
    else
       echo $file >> mul_versions
    fi
done

echo -e "\e[1;33mcorrect的插件是正确的\e[0m"
cat correct
echo -e "\e[1;32mnot_exsit中的插件不存在\e[0m" 
cat not_exsit
echo -e "\e[1;34mmul_versions的插件有多个版本\e[0m" 
cat mul_versions
echo -e "\e[1;35merror的插件版本不对\e[0m"
cat error

结果如下:

posted @ 2021-08-28 11:59  不知道说什么才好  阅读(228)  评论(0编辑  收藏  举报