LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
12
返回列表 发新帖
楼主: liuyunfly

请教如何在一个目录中两两判断两个文件是否相同?

[复制链接]
发表于 2007-1-8 03:13:04 | 显示全部楼层
Post by seamonkey

diff不便于比较binary文件


愿闻其详
LZ的要求只是判断文件是否
binary文件也能在diff下得出binary diff的结果
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-1-8 10:29:25 | 显示全部楼层
问题就在于这样写1和2比较了一次,2又和1比较了一次,怎么写才能不重复的比较阿???
Post by huan
for怎么不支持嵌套了


  1. [0 No.2106 huan@huan ~/tmp/diff]$ touch a b 1 2

  2. [0 No.2107 huan@huan ~/tmp/diff]$ for f1 in *; do for f2 in *; do [[ $f1 == $f2 ]] && continue; echo "$f1, $f2"; done; done
  3. 1, 2
  4. 1, a
  5. 1, b
  6. 2, 1
  7. 2, a
  8. 2, b
  9. a, 1
  10. a, 2
  11. a, b
  12. b, 1
  13. b, 2
  14. b, a

  15. [0 No.2108 huan@huan ~/tmp/diff]$
复制代码
回复 支持 反对

使用道具 举报

发表于 2007-1-8 15:59:49 | 显示全部楼层
下面的脚本可以避免多余的判断
  1. #!/bin/bash
  2. index=0
  3. for fn in `ls $1`;do
  4.         if [ -f $1/$fn ];then
  5.                 array[$index]=$1/$fn
  6.                 index=$((index+1))
  7.         fi
  8. done
  9. n=${#array[@]}
  10. for((i = 0; i < $n; i++));do
  11.         for((j = i + 1; j < $n; j++));do
  12.                 cmp ${array[$i]} ${array[$j]} > /dev/null || echo "${array[$i]} and ${array[$j]} is different!"
  13.         done
  14. done
复制代码
回复 支持 反对

使用道具 举报

发表于 2007-1-10 00:32:19 | 显示全部楼层
Post by Iambitious
下面的脚本可以避免多余的判断

  1. #!/bin/bash

  2. index=0
  3. for fn in `ls $1`;do
  4.         if [ -f $1/$fn ];then
  5.                 array[$index]=$1/$fn
  6.                 index=$((index+1))
  7.         fi
  8. done
  9. n=${#array[@]}
  10. for((i = 0; i < $n; i++));do
  11.         for((j = i + 1; j < $n; j++));do
  12.                 cmp ${array[$i]} ${array[$j]} > /dev/null || echo "${array[$i]} and ${array[$j]} is different!"
  13.         done
  14. done
复制代码


cmp ${array[$i]} ${array[$j]} > /dev/null || echo "${array[$i]} and ${array[$j]} is different!"

这行很经典,崇拜一下
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-1-10 13:09:00 | 显示全部楼层
谢了,总算搞定了,老师的讲义上都没说脚本里可以用数组就让我们做这种题,唉…… ×_×

Post by Iambitious
下面的脚本可以避免多余的判断

  1. #!/bin/bash

  2. index=0
  3. for fn in `ls $1`;do
  4.         if [ -f $1/$fn ];then
  5.                 array[$index]=$1/$fn
  6.                 index=$((index+1))
  7.         fi
  8. done
  9. n=${#array[@]}
  10. for((i = 0; i < $n; i++));do
  11.         for((j = i + 1; j < $n; j++));do
  12.                 cmp ${array[$i]} ${array[$j]} > /dev/null || echo "${array[$i]} and ${array[$j]} is different!"
  13.         done
  14. done
复制代码
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表