我正在尝试编写一个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(是的,运行时间会很糟糕,但它会节省一个从长远来看,这是一段巨大的时间。
我知道这有点长,但任何帮助都会非常感激。 谢谢!
答案 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盒来测试它。