sed -e 's/OLD/NEW/g'
フィルター (例: ) を svn プロパティ値に再帰的に適用したいと思います。
まず、単一のターゲットに対して、次のいずれかを実行できます。
svn propget --strict PROPNAME TARGET | sed -e 's/OLD/NEW/g' | svn propset PROPNAME --file=- TARGET
svn propset PROPNAME --file=<(svn propget --strict PROPNAME TARGET | sed -e 's/OLD/NEW/g') TARGET
SVN_EDITOR="sed -i -e 's/OLD/NEW/g'" svn propedit PROPNAME TARGET
svn propedit --editor-cmd "sed -i -e 's/OLD/NEW/g'" PROPNAME TARGET
どれが一番いいでしょうか?
1 または 2 について私が気に入らないのは、svn propget ... | sed ...
パイプラインが失敗した場合svn propset
でも、おそらく空の標準入力で実行され、プロパティがリセットされることです。
一方、3 または 4 について私が気に入らないのは、フィルタリング コマンド ライン全体を引用して 1 つの文字列にする必要があることです。また、オプションに注意してください-i
— フィルタリング コマンドは、ファイル パラメーターを取り、それをその場で編集する必要がありtr
ますawk
。
これらのいずれかに対するより良い代替案、または可能な改善策はありますか?
第二に、これを再帰的に行うにはどうすればよいですか?つまり、指定されたプロパティ PROPNAME を持つ特定の TARGET の下のすべてのターゲットで? すべてを 1 つのテキスト ストリームに連結するため、単に追加-R
することはできません。私は次のようなことをしなければならないようです:svn propget
svn propedit
-R
svn proplist -R --only-with PROPNAME TARGET | while read target
do
# do one of the above on "$target"
done
svn proplist
と呼ばれるものはありません。--only-with
その出力を簡単に解析して、プロパティを持つターゲットのみの名前を取得することはできません。
それを行う良い方法はありますか?