我正在尝试编写一个程序,该程序允许我在一个目录上进行查找,然后在另一个目录中运行查找,如果文件名相同,但在不同的情况下编写,依此类推,则为我输出这些文件的结果。
然而,就目前而言,我很难将这两个发现结合起来,并对它们进行"如果"运算。
到目前为止:
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
更改:
- 您需要使用括号
[...]
或双括号[[...]]
进行相等测试 - 您希望比较两个find命令的输出,因此这两个命令都应该在命令替换括号
$(...)
中并加引号 if
后面的then
必须在新行上或用分号分隔(尽管then
和下一个命令之间不需要换行)find
的输出通常以指定要搜索的目录为前缀,因此两个不同目录的输出总是不同的。这就是我添加-printf %P
的原因,下面是%P
部分的手册页部分:
%p文件的名称,以及在其下发现已删除的命令行参数的名称。