sedコマンドを使用して、置き換える文字列としてファイル名とパスを使用します。

sedコマンドを使用して、置き換える文字列としてファイル名とパスを使用します。

次の状況を処理しようとしています。フォルダツリーに拡張子を持つ多くのファイル(100以上)があり、.htmlこのファイルにはファイル名の文字列があります。たとえば、次のファイルがあります。

file1.htmlsubfolder1/subfolderA/文字列を含むファイルのどこかにありますfile1.html

file2.htmlsubfolder1/subfolderB/文字列を含むファイルの場所file2.html

file3.htmlsubfolder2/subfolderC/文字列を含むファイルのどこかにありますfile3.html

など。

デフォルトでは、ツリー構造全体を巡回してファイル名と同じ文字列を見つけ、パス+ファイル名に置き換えます.html

したがって、上記の例では、次のものを交換したいと思います。

  • ファイルからfile1.html

    file1.html使用。 。 。交換subfolder1/subfolderA/file1

  • 存在するfile2.html

    file2.html使用。 。 。交換subfolder1/subfolderB/file2

  • file3.htmlから:

    file3.html使用。 。 。交換subfolder2/subfolderC/file3

find文字列を使用して置き換える方法を知っていますsed。次のコマンドを使用しました。

find . -type f -name \*.html -exec sed -i.bak 's|<old string>|<new string>|g' {} +

ただし、この場合は「古い文字列」と「新しい文字列」をハードコードする必要があります。

上記の目標をどのように達成できますか?

"前の文字列" = ファイル名 + ファイル拡張子

"新しい文字列" =パス+ファイル名 - ファイル拡張子

どんな助けでも大変感謝します。

ベストアンサー1

findあなたは割り当てられたことを一人ではできないようですexecfindパイプの結果を小さなループに入れてみてくださいwhile

find . -type f -name \*.html | while read PN; do sed "s|${PN##*/}|${PN%.*}|g" "$PN"; done

おすすめ記事