背景
最近的工作中,领导需要比较指定两个文件夹内,文件清单的差异。本来想的直接用眼睛看,但我发现那两个文件夹的文件数量还挺多,看了一会儿,眼睛都花了,我就想着写个简单的脚本实现。
代码
#!/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
使用
如下图所示的两个文件夹,存在以下文件。
运行./compare,sh ${文件夹A} ${文件夹B} ${需要过滤的关键词}
命令即可实现比较,其中${需要过滤的关键词}
是指只有文件名包含此关键词时,才纳入比较的对象,这个参数可以不写,那就表示比较所有文件。
例如:./compare,sh locale-a locale-b qm
如需转载,请注明本文的出处:农民工老王的CSDN博客https://blog.csdn.net/monarch91 。