linux - 比较脚本帮助

标签 linux bash directory diff

我正在尝试编写一个 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(是的,运行时间将很糟糕,但从长远来看,它将节省大量时间)。

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

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

最佳答案

假设根目录中的 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 机器来测试它。

关于linux - 比较脚本帮助,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5600340/

相关文章:

linux - 有没有一种简单的方法来 fork 文件描述符?

linux - CentOS Unix Cron 全部设置为同一时间时的执行顺序

linux - Linux 中的以太网 + 串口

linux - 如何创建 cygwin 可执行文件

c++ - 使用 Visual Studio C++ 按名称搜索目录中的文件

PHP:如何遍历目录中的每个 XML 文件?

linux - 重新启动 Windows 计算机导致 VirtualBox 上的 CentOS 虚拟机崩溃

linux - 如果 eth0 关闭/启动,如何发送不同的 SNMP 陷阱?

regex - 使用用户指定的替换字符串进行 sed 替换

matlab - 从不同目录运行 Matlab GUI