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 中的 $? 并且“触摸”文件以更新其 mdate 是可以的,但 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 就地更新。有趣的是,这会将符号链接转换为常规文件。然后 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>

相关内容