次のような名前のファイルがたくさんあります。
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-
最新バージョンです。だから、毎回比較するファイルが2つあります。
私はそれらを結合したいhtmldiff。
htmldiff -a something08-a-something.html something08-b-something.html -o something08-diff.html
これをどのように自動化できますか?
を使用する方がより確実な方法だと思いますfind
。-[/b]a-v[1/2]
答え1
ファイル名パターンが既に存在しているため、1つはで、-a-
もう1つはということがわかり、-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
ファイル名に各プレフィックスがある2つのファイルしかないと仮定すると、次のように動作します。
htmldiff prefix-*.html -o prefix-diff.html