比较脚本帮助

时间:2011-04-08 20:17:22

标签: linux bash directory diff

我正在尝试编写一个Bash脚本,该脚本将通过一组缓存目录并对内容进行一些比较。 (我想找到两个在我正在研究的项目中具有最小差异的两个)。

结构是有一个根目录;之后的两个子目录;在最多52个目录下(AA b BB等);并且在每个目录下的内容实际上是可变数量的目录。基本上是:

root >> a/b >> a/AA/b/BB/.../z/ZZ >> <some hex-named directory>

所以我需要到达最后一级,然后在该目录中的文件上运行diff(内容总是以相同的名称命名)和所有其他缓存的文件,并找出最相似的文件是什么。

顶部的两个目录永远不会更改名称,因此很容易。这些目录下的目录遵循一个设定的格式(它们从'a'和'AA'开始顺序填充,直到'z'和'ZZ'),所以我可以为此硬编码数组。我认为做最后一级的最好方法是运行'ls&gt; dirList',然后将dirList读入一个数组,并使用它进入目录,并使用相同的算法在每个其他缓存事物上运行diff(是的,运行时间会很糟糕,但它会节省一个从长远来看,这是一段巨大的时间。

  • 这是一种合理的方法吗?有更好,更有效的方式吗?
  • 另外,有没有办法让diff计算不同的行数?

我知道这有点长,但任何帮助都会非常感激。 谢谢!

1 个答案:

答案 0 :(得分:0)

假设根目录中的2个目录是要比较的目录(a&amp; b),我会尝试类似的东西:

min_diff=9999 # big value
file2remember=''

cd a || return $?
find * -type f |while read f
do
    n=`diff "$f" "../b/$f"|wc -l`
    if [ $n -lt $min_diff ]
    then min_diff=$n ; file2remember="$f"
    fi
done

echo $file2remember

注意:我没有linux或unix盒来测试它。