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

时间:2014-02-05 02:34:18

标签: bash shell linux-kernel

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

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

我很确定问题在于尝试在$ DIR目录中调用“搜索最新文件”命令。这不会返回$ DIR给出的目录中的最新文件吗?

5 个答案:

答案 0 :(得分:1)

正如您所写,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

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

答案 1 :(得分:1)

怎么样?

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

答案 2 :(得分:1)

请务必仅在ls上运行$DIR

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

另请注意,强烈建议在命令中使用额外引用。

答案 3 :(得分:0)

所以我发现这是唯一正常的方法:

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

谢谢大家,您的意见得到了很多帮助。

一个更快的问题。有没有办法判断diff是否发现这两个文件不同?我能否以某种方式将上面的整行代码添加到“if”语句中?

答案 4 :(得分:0)

你可以这样试试,

如果!延迟;然后   回声“他们是不同的” 网络