如何在给定目录中找到最新文件并在diff调用中使用它



我试图在bash脚本中调用两个文件,一个使用变量给出,另一个是目录中的最新文件。这是我正在使用的命令,其中$ file是一个变量,指向当前目录中的文件,而$ dir是一个指向另一个目录的变量,我正在搜索最新文件:

diff $FILE $DIR/$(ls -tr | tail -n 1) > diff.txt

我很确定问题在于尝试在目录$ dir中调用"搜索最新文件"命令。这是否不会返回$ dir?

给出的目录中的最新文件

当您编写它时,ls命令在当前目录中运行。您可以简单地通过明确告诉ls来解决此问题:

diff "$FILE" "$DIR/$(ls -tr $DIR | tail -n 1)" > diff.txt

如果找到差异,则diff命令的返回代码为0,如果找到差异,则1的返回代码。上一个命令的返回代码存储在变量$?中,可以在以下if语句中使用:

if (( $? == 0 ))
then
    echo "match..."
else
    echo "no match..."
fi

执行此操作时要小心,因为$?被任何后续命令覆盖。这甚至可以在同一管道中包含命令。

怎么样?

diff $FILE $DIR/$(ls -tr $DIR| tail -n 1) > diff.txt

确保仅在$DIR上运行ls

diff "$FILE" "$DIR/$(ls -tr "$DIR"| tail -n 1)" > diff.txt

还强烈建议您注意命令中的额外报价。

,所以我发现这是唯一正确起作用的东西:

diff "$FILE" "$DIR/$(ls -tr "$DIR"| tail -n 1)" > diff.txt

谢谢大家,您的意见有所帮助。

再一个快速的问题。有没有办法告诉DIFF是否发现两个文件有所不同?我可以以某种方式将上面的整个代码行添加到"如果"语句中吗?

您可以这样尝试,

如果!扩散;然后 回声"他们不同"fi

相关内容

  • 没有找到相关文章

最新更新