【问题标题】:Compare all files of a folder pairwise成对比较文件夹中的所有文件
【发布时间】:2022-01-25 16:39:59
【问题描述】:

输入:

z2042
z0138
z0189
z2294

你好,

我想比较一个文件夹中的所有文件,看看它们是否不同。 比如:z2042 和 z0138,z0138 和 z0189,z0189 和 z2042 等等......

我知道如何将所有文件与单个文件进行比较:

for i in ./z*; do diff -q "$i" z2294; done

但我不知道如何将所有文件与所有文件进行比较。 我用另一个 for 循环尝试使用变量“x”而不是 z2294,但它不起作用:/

谢谢帮助

【问题讨论】:

  • 你想只比较顺序对吗?

标签: bash


【解决方案1】:
z_files="./z*"
for i in $z_files; do
  for j in $z_files; do
    if [ "$i" \> "$j" ]; then
      diff -q "$i" "$j"
    fi
  done
done

【讨论】:

  • 这将对每对进行两次比较。也就是说,它将运行diff -q z2042 z0138diff -q z0138 z2042。您可以将条件更改为if [ "$i" \> "$j" ]; then 来解决此问题。请注意> 运算符必须在[ ] 测试中被引用或转义;它不会在[[ ]] 条件表达式中被引用或转义。
  • 感谢工作!但是我也尝试将其用于相反的情况,以便脚本看起来是否相同。我用'-s'替换了'-q',但这只是让我感到震惊,我认为文件中的所有行都是相同的或类似的。我可以解决这个问题吗?我只想要一个像“./z1234 和 ./2134 是一样的”这样的输出
  • @Argaros 可以查看diff的返回码,根据需要进行处理。看here
  • 是的,我知道了。谢谢男人:D
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多