获取文件名并将其写入先前命名空间的位置

获取文件名并将其写入先前命名空间的位置

我有数百个源代码文件。我想根据文件名路径重命名命名空间。当然斜线必须用点代替。

我尝试过查找-执行但我无法获取里面的文件名sed将当前命名空间替换为路径。

find -type f -iname *.cs  -exec  sh -c 'x="{}"; sed -E "s/\//./; s/(namespace.Project).+/\1.$x/" {}' \;

但我得到

sed:-e 表达式 #1,字符 36:“s”的未知选项

答案1

第一个sed命令 ( s/\//./) 将用文件中的点替换所有斜杠内容,不在文件名中。

第二个sed命令 ( s/(namespace.Project).+/\1.$x/) 会将$x(仍然未更改的文件路径)添加到命名空间。这会产生错误,sed因为它包含由 解释的未转义斜杠sed

这个相关问题


另外,请继续阅读如何find -exec sh -c安全使用。直接添加{}到 bash 内容是一场安全噩梦。

答案2

好吧,我找到了我的方法……使用 bash 变量。像这样的东西:

for i in `find -type f -iname *.cs`; do j=$(echo $i|sed -E 's/\.\//namespace Project\//g;s/\//./g; s/(\.[[:alnum:]]*\.cs$)//g'); sed -i -E "s/(namespace Project.+)/$j/g" $i ; done;

相关内容