ファイル名を取得し、古い名前空間の場所に書き込みます。

ファイル名を取得し、古い名前空間の場所に書き込みます。

何百ものソースコードファイルがあります。ファイル名のパスに基づいて名前空間の名前を変更したいと思います。もちろん、スラッシュはドットに置き換える必要があります。

私は前に試しました検索 - 実行ただし、ファイル名を内部から取得することはできません。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/\//./)はファイル内のすべてのスラッシュをドットに置き換えます。コンテンツ、ファイル名ではありません。

2番目のsedコマンド(s/(namespace.Project).+/\1.$x/$xは、名前空間に(まだ変更されていないファイルパス)を追加します。sedで解釈されたエスケープされていないスラッシュが含まれているため、エラーが発生しますsed

バラよりこの関連質問


また、読んでください。find -exec sh -c安全に使用する方法。 Bashにコンテンツを直接追加するのは{}セキュリティ上の悪夢です。

おすすめ記事