【问题标题】:Comparison script help比较脚本帮助
【发布时间】:2011-08-01 19:15:42
【问题描述】:

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

结构是有根目录;之后的两个子目录;在最多 52 个目录下(a AA b BB 等);并在其中的每一个目录下都有内容实际所在的目录。基本上:

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

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

顶部的两个目录永远不会更改名称,所以这很容易。这些目录下的目录遵循一套格式(它们从“a”和“AA”开始依次填充到“z”和“ZZ”),所以我可以为此硬编码一个数组。我认为做最后一级的最好方法是运行'ls> dirList',然后将dirList读入一个数组,并使用它进入目录,并使用相同的方法在所有其他缓存事物上通过循环运行差异算法(是的,运行时间会很糟糕,但从长远来看,它将节省大量时间)。

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

我知道这有点长,但任何帮助将不胜感激。 谢谢!

【问题讨论】:

  • 这是无法阅读的。请了解如何使用输入框顶部的格式化“工具”。您应该能够单击消息底部标记为“编辑”的链接。至少,请插入一些段落分隔符。此外,获得快速/有用答案的问题的一般形式是 1。我有这个输入数据,2。我想要这个输出,3。但是我得到了这个。 4.这是我正在做的,你能看到任何解决方法吗? .... 谢谢!

标签: linux bash directory diff


【解决方案1】:

假设您的根目录中的 2 个目录是要比较的目录 (a & 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 机器来测试它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-06-24
    • 1970-01-01
    • 2011-10-05
    • 1970-01-01
    • 1970-01-01
    • 2011-02-24
    • 2018-08-08
    • 1970-01-01
    相关资源
    最近更新 更多