Bash Shell脚本-很难将两个不同的Finds合并为1或简单地比较结果



我正在尝试编写一个程序,该程序允许我在一个目录上进行查找,然后在另一个目录中运行查找,如果文件名相同,但在不同的情况下编写,依此类推,则为我输出这些文件的结果。

然而,就目前而言,我很难将这两个发现结合起来,并对它们进行"如果"运算。

到目前为止:

if ($(find teste1) != (find teste2)) then
echo "They are different"
else
echo "They are the same"
fi

我知道这与我一开始所说的相去甚远,但如果我甚至不能对我的发现运行这个简单的"if"命令,我将很难运行其余的命令。

那么,我上面的语法到底出了什么问题?如果你没有注意到的话,我是Shell Script的新手,我昨天才开始,我一直在尝试做一些关于"加入两个不同的FIND"的研究,但我在这方面遇到了一些困难。

有人能帮我吗?或者给我指一个好的方向,让我继续练习,达到我想要的目的?

使用

diff <(find test1) <(find test2)

用于比较作为伪文件传递的子shell的输出

对于等式的简单比较,当然可以使用cmp

if cmp -s <(find test1) <(find test2)
then
echo "equal"
else
echo "different"
fi

这样一来,一开始的差异会导致潜艇外壳的早期流产(由于管道破裂),因此不会计算不必要的东西。

简而言之,试试这个:

if [ "$(find teste1 -printf %P)" != "$(find teste2 -printf %P)" ]
then
echo "They are different"
else
echo "They are the same"
fi

更改:

  1. 您需要使用括号[...]或双括号[[...]]进行相等测试
  2. 您希望比较两个find命令的输出,因此这两个命令都应该在命令替换括号$(...)中并加引号
  3. if后面的then必须在新行上或用分号分隔(尽管then和下一个命令之间不需要换行)
  4. find的输出通常以指定要搜索的目录为前缀,因此两个不同目录的输出总是不同的。这就是我添加-printf %P的原因,下面是%P部分的手册页部分:

%p文件的名称,以及在其下发现已删除的命令行参数的名称。

相关内容

  • 没有找到相关文章

最新更新