linux - 使用 bash 递归查找具有相同名称但实际上不同的文件的最佳方法?

标签 linux bash unix

我在嵌套文件结构中有大约 15000 个图像,其名称是 SKUS。我需要确保没有具有相同 SKU 的文件实际上是不同的文件。

例如,如果我有两个或多个名为:MYSKU.jpg 的文件,我需要确保它们之间没有差异。

在 bash 命令中执行此操作的最佳方法是什么?

最佳答案

我不想为你完全解决这个任务,但这里有一些你可以尝试和整合的有用成分:

find /path -type f   # gives you a list of all files in /path

你可以像这样遍历列表

for f in $(find /path -type f -name '*.jpg'); do
  ...
done

现在您可以考虑在循环中需要收集的东西了。我建议

base=$(basename $f)
full_path=$f
hash=$(echo $f | md5sum | awk '{print $1}')

您现在可以将此信息存储在一个文件的三列中,这样每一行都包含您需要了解的有关文件的所有信息,以查找重复项。

由于您没有解释需要如何处理重复项,这里只是提供如何发现它们的建议。然后由您决定如何处理它们。

鉴于我们上面获得的列表,您可以存储它的两个副本:一个只是按基名排序,另一个按基名排序不包括重复项:

sort -k2    list.txt | column -t > list.sorted.txt       
sort -k2 -u list.txt | column -t > list.sorted.uniq.txt

这里我假设基本名称在第二列

现在运行

diff list.sorted.txt list.sorted.uniq.txt

查看同名文件。从每一行中,您现在可以提取 MD5 校验和以验证它们是否真的不同以及完整路径以执行某些操作,例如 mvrmln

关于linux - 使用 bash 递归查找具有相同名称但实际上不同的文件的最佳方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24195874/

相关文章:

c - 在基于arm32镜像的容器中,当目录为空时,readdir返回EOVERFLOW

c++ - 分析程序执行的一部分

bash - cut -f 参数无法正常工作

iphone - iPhone 上的 Fork()

linux - 尝试用一系列值替换一组文件中的特定列

linux - 如何创建由多个命令组成的别名?

linux - 将带有日期的 stderr 重定向到来自 Cron 的日志文件

linux - 在保留不匹配的值时如何合并两个文件?

performance - CentOS CPU 使用率

unix - UNIX中的基本计算器脚本-如果没有输入任何变量,希望使错误消息消失