我在一个目录中有大约1000个html文件,这些文件是网页的不同版本。每个都是根据页面修改的日期命名的,例如20190104
、20190105
,但偶尔也会有间隙,例如在20190105
和20190107
之间。
我知道如何使用diff将一个文件与下一个版本进行比较,并将差异保存到第三个文件中,但我想要一个循环,用于所有1000个文件。标准的for i in ./*
不起作用,因为我需要在循环中引用多个文件。
我怀疑我需要将文件列表转换为一个数组,然后有一个引用数组元素n和n+1的for循环,但语法有问题。
元素n和n+1
不,不要考虑未来——你不知道。你知道过去——迭代n-1
和n
。
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