我有一堆这样命名的文件:
something08-a-v1.html
something08-b-v2.html
something09-a-v1.html
something09-b-v2.html
somethingelse10-a-v1.html
somethingelse10-b-v2.html
-a-
是该文件的先前版本。-b-
是较新的版本。所以我每次都有两个文件要比较。
我想将它们与htmldiff。
htmldiff -a something08-a-something.html something08-b-something.html -o something08-diff.html
我怎样才能自动化这个?
我认为更明显的方法是使用find
,但我很难管理仅选择两个文件并重命名而不使用-[/b]a-v[1/2]
.
答案1
由于您已经有了文件名模式,您知道一个是,-a-
另一个是-b-
,并且假设您只有显示的文件对,您可以使用:
$ for file in *-a-*; do
prefix=${file%%-*}
htmldiff -a "$prefix"-a-* -b "$prefix"-b-* -o "$prefix"-diff.html
done
该语法将从变量值的末尾${var%%pattern}
删除最长的匹配项。pattern
在这里,模式是-*
这样的,它将删除从头到尾的所有内容-
,只留下前缀。
请注意,根据GitHub 页面的htmldiff
,没有-b
选项,-a
选项是:
-a --accurate-mode 使用准确模式而不是危险模式
所以我怀疑你的命令实际上想要的是:
$ for file in *-a-*; do
prefix=${file%%-*}
htmldiff -a "$prefix"-a-* "$prefix"-b-* -o "$prefix"-diff.html
done
或者:
$ for file in *-a-*; do
prefix=${file%%-*}
htmldiff "$prefix"-a-* "$prefix"-b-* -o "$prefix"-diff.html
done
答案2
假设您只有两个文件,文件名上带有每个前缀,这应该可以工作:
htmldiff prefix-*.html -o prefix-diff.html