在Linux中,比较2文件夹中每个字节的文件字节数,并查找重复的文件
我有几个图像文件.jpg、png和更多包含2个目录中的照片,如何在Linux下使用Bash逐字节比较2个目录中的文件,以便: 1突出显示标准输出或文件上两个目录中的重复文件在Linux中,比较2文件夹中每个字节的文件字节数,并查找重复的文件,linux,bash,shell,Linux,Bash,Shell,我有几个图像文件.jpg、png和更多包含2个目录中的照片,如何在Linux下使用Bash逐字节比较2个目录中的文件,以便: 1突出显示标准输出或文件上两个目录中的重复文件 2仅删除1个重复文件,例如最近的文件。您可能不需要逐字节比较。计算校验和并使用它更容易,碰撞概率也很低。如果您想在慢速磁盘上多次执行此操作,还可以节省一些时间 我有两个目录a和b,其中包含以下文件: $ ls * a: agetty agetty-2 badblocks bridge btrfs btrfs-ima
2仅删除1个重复文件,例如最近的文件。您可能不需要逐字节比较。计算校验和并使用它更容易,碰撞概率也很低。如果您想在慢速磁盘上多次执行此操作,还可以节省一些时间 我有两个目录a和b,其中包含以下文件: $ ls * a: agetty agetty-2 badblocks bridge btrfs btrfs-image lvreduce lvreduce-2 resize2fs b: agetty agetty-2 bridge 您还可以使用md5sum和其他。md5sum比sha256sum快,但在两个文件具有相同校验和的情况下发生冲突的概率稍高,但仍然足够 文件内容:
b1a58ac886f70cb65cc124bcc8e12a52659fbf5ce841956953d70d29b74869d7 a/resize2fs
c0e532634d14783bbd2ec1a1ed9bfc0b64da4a1efea2e9936fb97c6777ac1e10 a/btrfs-image
d00cdf58189e2171e3cb6610e6290c70ba03ecc0dc46b0570595d9187d769d2e a/btrfs
fadc2874feb053947ac1a4d8f14df58dabc093fa00b92f01125497ac9a171999 a/badblocks
424cf438ac1b6db45d1f25e237f28cc22bd7098a7fdf0f9c402744dc3f6ea6f2 a/agetty
424cf438ac1b6db45d1f25e237f28cc22bd7098a7fdf0f9c402744dc3f6ea6f2 a/agetty-2
424cf438ac1b6db45d1f25e237f28cc22bd7098a7fdf0f9c402744dc3f6ea6f2 b/agetty
424cf438ac1b6db45d1f25e237f28cc22bd7098a7fdf0f9c402744dc3f6ea6f2 b/agetty-2
424cf438ac1b6db45d1f25e237f28cc22bd7098a7fdf0f9c402744dc3f6ea6f2 b/bridge
7e177d31c45ab550b27ca743e4502cc4be519de4c75b2f479f427930bcb7c7bd a/bridge
9954909c3436bef767729b8f6034e5f12ef300fad16dc0e540bfa3c89c38b9c6 a/lvreduce
9954909c3436bef767729b8f6034e5f12ef300fad16dc0e540bfa3c89c38b9c6 a/lvreduce-2
您甚至可以直观地比较这些文件。具有相同内容的文件具有相同的校验和。请注意,SHA256校验和为64个十六进制数字/字符长32字节
2.找出重复的行
cat cksums | uniq-Dw 64 | sed's/^\s*\s*/'
输出:
a/agetty
a/agetty-2
b/agetty
b/agetty-2
b/bridge
a/lvreduce
a/lvreduce-2
您还可以将具有相同内容的文件分组:
cat cksums | uniq-组-w 64-组| sed's/^\s*\s*/'
3列出要删除的文件
计数=0
cat cksums | uniq-group-w 64-group | sed's/^\s*\s*/'|读取文件名时
做
如果[-z$filename]]
然后
如果[[1-lt$count]]
然后
echo$prev
fi
计数=0
其他的
prev=$filename
计数++
fi
完成
通过将| xargs rm-v添加到done来删除它们。您可以使用cmp命令比较二进制文件,以确定它们是否相同。使用该命令,尝试一个脚本,然后提出一个更具体的问题。如果文件是相同的,为什么在确定要删除哪个文件时要考虑时间戳?@williampersell事实上,删除哪个并不重要,可以删除第二个搜索目录中的一个,而不是将每个文件与所有其他文件进行比较,考虑为每个文件生成MD5校验和,然后排序并查找重复校验和…
a/resize2fs
a/btrfs-image
a/btrfs
a/badblocks
a/agetty
a/agetty-2
b/agetty
b/agetty-2
b/bridge
a/bridge
a/lvreduce
a/lvreduce-2