文件版本比较
服务器上的系统所需要的某些插件的最新版本放在Windows系统上的某个目录下,现在需要比对确认服务器上的目录里是否都是最新的版本
老方法
插件的命名格式cn.com.aaaa.bbbb.cccc_v202108281121.jar
,v202108281121是版本号,由于插件很多,靠眼睛去找十分麻烦。
- Windows上记住一个插件名称,然后再去看服务器上查找对比;
- Windows点击选中一个插件,按F2,然后复制
cn.com.aaaa.bbbb.cccc
前缀,再去服务器使用命令ls -al|grep cn.com.aaaa.bbbb.cccc
,最后进行比较确认。
使用脚本
- 获取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
假设此时服务器上的插件为:
- 把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
结果如下: