给出两个根文件夹A和B,
如何在A和B的子文件夹之间找到重复的文本文件?
换句话说,我正在考虑A和B的文件交集。
我不想在A或B中找到重复的文件,只能找到A和B中的文件。
修改
副本我指的是具有相同内容的文件
答案 0 :(得分:3)
comm -1 -2 <(ls dir1 | sort) <(ls dir2 | sort)
f1
ls -1 dir1
f1
f2
f3
ls -1 dir2
f1
f4
f5
comm -1 -2 <(ls dir1 | sort) <(ls dir2 | sort)
f1
#If not on bash,then
bash -c 'comm -1 -2 <(ls dir1 | sort) <(ls dir2 | sort)'
或使用find。
find dir1 dir2 -type f -ls | awk -F'/' 'N[$2]++ {print $NF}'
f1
或完整路径
find dir1 dir2 -type f -ls | awk '{print $NF}' | awk -F'/' 'N[$2]++'
dir2/f1
根据内容查找重复项。
files1=(dir1/*)
files2=(dir2/*)
for item1 in ${files1[*]}
do
ck1=$(cksum $item1 |awk '{print $1}')
for item2 in ${files2[*]}
do
ck2=$(cksum $item2 |awk '{print $1}')
if [ "$ck1" == "$ck2" ];then
echo "Duplicate entry found for $item1 and $item2"
fi
done
done
答案 1 :(得分:3)
如评论部分所示,我会为每个文件生成一个MD5校验和,只需一次 - 然后查找重复的校验和。
这样的事情:
find DirA -name \*.txt -exec md5sum {} + > /tmp/a
find DirB -name \*.txt -exec md5sum {} + > /tmp/b
现在找到两个文件中出现的所有校验和。
所以,按照这些方针:
awk 'FNR==NR{md5[$1];next}$1 in md5' /tmp/[ab]
或者可能是这样的:
awk 'FNR==NR{s=$1;md5[s];$1="";name[s]=$0;next}$1 in md5{s=$1;$1="";print name[s] " : " $0}' /tmp/[ab]