背景

最近的工作中,领导需要比较指定两个文件夹内,文件清单的差异。本来想的直接用眼睛看,但我发现那两个文件夹的文件数量还挺多,看了一会儿,眼睛都花了,我就想着写个简单的脚本实现。

代码

#!/bin/bash
# ------------------------------------------
# Filename    : compare.sh
# Version     : 1.1
# Date        : 2023-9-13 18:30:23
# Author      : 农民工老王@CSDN
# Email       : scwja@qq.com
# Website     : https://blog.csdn.net/monarch91
# Description : 检查两个文件夹文件清单的异同
# ------------------------------------------
if [ "w$3" = w ]; then
  dir1Files=`ls -l $1 |awk '{print $9}'`
  dir2Files=`ls -l $2 |awk '{print $9}'`
fi
dir1Files=`ls -l $1 |grep "$3"|awk '{print $9}'`
dir2Files=`ls -l $2 |grep "$3"|awk '{print $9}'`

commonStr=""

for line in  $dir1Files
do
  found=0
  for l in  $dir2Files
  do
    if [ "w${line}" = "w${l}" ]; then
        found=1
        commonStr="${commonStr}共有文件: ${line}\n"
        break
    fi
  done

  if [ ${found} -eq 0 ]; then
    echo "${1} 独有文件: ${line} 。"
  fi
done

echo " "

for line in  $dir2Files
do
  found=0

  for l in  $dir1Files
  do
    if [ "w${line}" = "w${l}" ]; then
        found=1
        break
    fi
  done

  if [ ${found} -eq 0 ]; then
    echo "${2} 独有文件: ${line} 。"
  fi
done

echo " "

if [ -n "${commonStr}" ]; then
  echo -e "${commonStr}"
else
  echo "未发现同名文件。"
fi

使用

如下图所示的两个文件夹,存在以下文件。
自动化工具-文件清单对比-LMLPHP运行./compare,sh ${文件夹A} ${文件夹B} ${需要过滤的关键词}命令即可实现比较,其中${需要过滤的关键词}是指只有文件名包含此关键词时,才纳入比较的对象,这个参数可以不写,那就表示比较所有文件。

例如:./compare,sh locale-a locale-b qm

自动化工具-文件清单对比-LMLPHP


如需转载,请注明本文的出处:农民工老王的CSDN博客https://blog.csdn.net/monarch91 。

10-27 23:19