sed && svn の問題

sed && svn の問題

私はSVN作業コピーを持っていて、次のコマンドを実行しました

./source * -type f -exec sed "s/@version 0.5.3/@version 0.5.4/" -i {} \; を検索します。

ファイルはすべて更新されていますが、これらのいずれかを実行しても svn は変更を認識しません。

svn ステータス ./source

svn diff ./ソース

svn コミット ./source

また、sed から $? をチェックするスクリプトを書いてみましたが、ファイルを「タッチ」して日付を更新するのは問題ありませんが、sed は常に 0 を返すようです -.-

今何ができるでしょうか? -.-

答え1

問題は、次の使用法にありますfind:

find dir1 -type f

ディレクトリ構造内のすべてのファイル (.svnディレクトリ内のファイルを含む) と一致します。 内のファイルは、に対して.svn実行するために使用されるファイルですsvn diff。つまり、本質的には、作業コピーだけでなく、ツリー内のすべてのファイルのコピーが変更されたことになります。

次の構文を試してください:

find ./source * -type f ! -path '*/.svn/*' -exec sed "s/@version 0.5.3/@version 0.5.4/" -I {} \;

答え2

私の場合、実際のファイルへのシンボリック リンクを更新していたことが判明しました。sed in-place update を使用しました。興味深いことに、これによりシンボリック リンクが通常のファイルに変換されます。その後、当然ながら「オブジェクト」タイプが変更されたため、svn は満足しませんでした。

シンボリック リンクを通常のファイルに変更する方法は次のとおりです。

user@host>ls -l txt*
-rw-rw-r-- 1 user user 90 Feb 28  2020 txtfile
lrwxrwxrwx 1 user user 7 Aug  5 11:07 txtln -> txtfile
user@host>sed -i "s/hello/mello/" txtln
user@host>ls -l txt*
-rw-rw-r-- 1 user user 90 Feb 28  2020 txtfile
-rw-rw-r-- 1 user user 90 Aug  5 11:08 txtln
user@host>

関連情報