find+sed を使用して、ディレクトリ内の各 SVG にタグを追加します。

find+sed を使用して、ディレクトリ内の各 SVG にタグを追加します。

デフォルトでは、小さなアイコンである何百ものSVGファイルを含むディレクトリがあります。ファイル名をコンテンツとして使用して、各アイコンに要素を追加し、<title>icon name</title>すべてのハイフンを空白に変更して拡張子を削除したいと思います。

たとえば、ファイルは次のようになりますarrow-down-narrow.svg

<svg width="21" height="21" xmlns="http://www.w3.org/2000/svg"><g fill="none" fill-rule="evenodd"><path d="M10.5 3.625a.75.75 0 0 1 .743.648l.007.102v10.438l2.22-2.218a.75.75 0 0 1 1.133.976l-.073.084-3.5 3.5a.754.754 0 0 1-.078.069l-.006.004h-.002l-.008.007a.747.747 0 0 1-.081.051l-.015.008a.744.744 0 0 1-.11.045l-.009.003a.707.707 0 0 1-.221.033h-.028a.754.754 0 0 1-.046-.004l-.028-.003-.012-.002a.752.752 0 0 1-.085-.018l-.025-.007a.747.747 0 0 1-.068-.025l-.028-.012a.744.744 0 0 1-.21-.149l-3.5-3.5a.75.75 0 0 1 .976-1.133l.084.073 2.22 2.219V4.375a.75.75 0 0 1 .75-.75z" fill="#000" fill-rule="nonzero"/></g></svg>

理想的には、このアップデートは次のマークアップを生成します。

<svg width="21" height="21" xmlns="http://www.w3.org/2000/svg"><title>arrow down narrow</title><g fill="none" fill-rule="evenodd"><path d="M10.5 3.625a.75.75 0 0 1 .743.648l.007.102v10.438l2.22-2.218a.75.75 0 0 1 1.133.976l-.073.084-3.5 3.5a.754.754 0 0 1-.078.069l-.006.004h-.002l-.008.007a.747.747 0 0 1-.081.051l-.015.008a.744.744 0 0 1-.11.045l-.009.003a.707.707 0 0 1-.221.033h-.028a.754.754 0 0 1-.046-.004l-.028-.003-.012-.002a.752.752 0 0 1-.085-.018l-.025-.007a.747.747 0 0 1-.068-.025l-.028-.012a.744.744 0 0 1-.21-.149l-3.5-3.5a.75.75 0 0 1 .976-1.133l.084.073 2.22 2.219V4.375a.75.75 0 0 1 .75-.75z" fill="#000" fill-rule="nonzero"/></g></svg>

可能ですか?

私はこれで遊んでいますが、正しい方法で行っているようですが、sedに完全に初めて遭遇し、エラーが発生しましたsed: RE error: illegal byte sequence

find . -name "*" -type f -print | xargs sed -i '' -e 's:svg">:svg">HELLO:g'

答え1

これは簡単な解決策です。 pwdですべてのsvgファイルを検索します。最初の>文字を> +タイトルタグ情報に置き換えます。 findのファイル名./の前には$f

OPが提案したように、すべてのsvgファイルがsvgタグで始まると機能します。ファイル名のスペースには機能しません。

今後

<svg width="21" height="21" xmlns="http://www.w3.org/2000/svg"><g fill="none"...

後ろに

<svg width="21" height="21" xmlns="http://www.w3.org/2000/svg"><title>test.svg</title><g fill="none"...

1つのsvgファイルのみを使用してこれをテストしました。元のファイルをバックアップしてください。 svgディレクトリのコマンド:

find . -iname '*.svg' -exec bash -c 'f=$(printf $0|sed s_./__);sed -i s_\>_\>\<title\>$f\<\/title\>_ $0' {} \;

関連情報