找到两个最新的变更文件并进行比较

找到两个最新的变更文件并进行比较

我有一个脚本,可以获取 .txt 文件并对其名称进行数据化。

我想要比较最新文件和次新文件之间的变化。

这就是我选择它们的方式:

ls -t -l | awk '{print $9}' | head -n1 | tail -n1 | tr -d ' ' | xargs echo FIRST=
ls -t -l | awk '{print $9}' | head -n2 | tail -n1 | tr -d ' ' | xargs echo SECOND=

我想使用 xargs 将导出提供给变量,然后简单地在它们之间进行差异比较,例如

diff $FIRST $SECOND

但由于 xargs 的方式,导出部分无法工作。

我认为我的整个方法都是错误的。

答案1

这将起作用,并将处理包含空格的文件名。

b=`ls -t -1 | head -n2`
first="$(echo "$b" | head -n1)"
second="$(echo "$b" | tail -n1)"
diff "$first" "$second"

这种方法的优点是它只解析一次目录列表,如果你运行的目录有很多(数千个)文件,它可能会更快。

答案2

稍微改变一下你的方法但得到一个可行的版本:

first=$(ls -t | head -n1)
second=$(ls -t | head -n2 | tail -n1)
diff "$first" "$second"

上述方法不适用于带有嵌入换行符的文件名等。要消除该限制,请使用:

ls -t --quoting-style=shell-always | head -n2 | xargs diff

相关内容