如何使用bash按顺序比较1000个文件——1到2,2到3,依此类推



我在一个目录中有大约1000个html文件,这些文件是网页的不同版本。每个都是根据页面修改的日期命名的,例如2019010420190105,但偶尔也会有间隙,例如在2019010520190107之间。

我知道如何使用diff将一个文件与下一个版本进行比较,并将差异保存到第三个文件中,但我想要一个循环,用于所有1000个文件。标准的for i in ./*不起作用,因为我需要在循环中引用多个文件。

我怀疑我需要将文件列表转换为一个数组,然后有一个引用数组元素n和n+1的for循环,但语法有问题。

元素n和n+1

不,不要考虑未来——你不知道。你知道过去——迭代n-1n

prev=  # empty previous filename
for cur in ./*; do
if [[ -n "$prev" ]]; then    # if prev is Nonempty
do_stuff "$prev" "$cur"
fi
prev=$cur
done

按对比较:

#!/usr/bin/env sh
comparePairs() {
while [ $# -gt 1 ]
do
printf 'Compare %s with %s.n' "$1" "$2"
shift
done
}
comparePairs foo bar baz cuux

输出:

Compare foo with bar.
Compare bar with baz.
Compare baz with cuux.

现在您的diff对:

#!/usr/bin/env bash
diffPairs() {
outputDir="$1"
shift
while [ $# -gt 1 ]
do
diff "$1" "$2" > "$outputDir/$1-$2.diff"
shift
done
}
# Use first argument as output directory
diffPairs "$@"

示例:

./diffPairs ~/outputdir ./*.html

相关内容

最新更新