CSSおよびJavascriptコンテンツ内のファイル名からスラッシュ/親パスを削除します。

CSSおよびJavascriptコンテンツ内のファイル名からスラッシュ/親パスを削除します。

cssすべてのファイルとファイルを確認する必要がありますがjs、参照されているファイル名にスラッシュ(/)が含まれている場合は、スラッシュを削除する必要があります。

私が望むもの:

  • 参照されたファイルの名前が指定されている場合、/file.jpg先行スラッシュは削除されますfile.jpg

    たとえば、CSSファイルで次の変更を行います。

    @import url("/base.css");到着@import url("base.css");

  • 参照ファイルの名前が指定されている場合は、/files/file.jpg先行スラッシュとフォルダ名を削除してくださいfile.jpg

私はそれを書き始めましたが、スラッシュをどのようにすべきかわかりませんでした。

grep -o -h -E '[A-Za-z0-9:./_-]+\.(png|jpg|gif|tif|css)' `find
${new_directory} -name '*.css' -or -name '*.js'`

これを行う方法を知っていますか?.shこれを行うにはシェルスクリプトを使用しています。

ベストアンサー1

このように出力を解析しないでくださいfind。ファイルに特殊文字が含まれていない場合は機能しますが、見つかったファイルに対してコマンドを呼び出す方がfind簡単で信頼性が高くなります。find

find "$new_directory" -name '*.css' -o -name '*.js' -exec grep … {} +

まあ、grepこれはテキストの置き換えを実行するのに適したツールではなく、単に検索ツールです。sed最も広く使用されている機能は、正規表現の代替機能であるストリームエディタです。 GNU sed(Linuxで見つかったなど)を仮定し、正規表現がデフォルトで正しいと仮定すると、つまりファイル名のように見える文字や数字、または拡張子の順序を一致させたい場合は、次のようにどこでも:._-呼び出しsed置換を実行します。 。DIR1/DIR2/FILE.EXTFILE.EXT

sed -e 's![/A-Za-z0-9:._-]*/\([A-Za-z0-9:._-]*\.\(png\|jpg\|gif\|tif\|css\)\)!!g'

これら2つの部分を組み合わせて交換したい場合は、最も簡単な方法はすぐに-iそれを実行するGNU sedオプションを使用することです。

find "$directory" -name '*.css' -o -name '*.js' \
     -exec sed -e 's![/A-Za-z0-9:._-]*/\([A-Za-z0-9:._-]*\.\(png\|jpg\|gif\|tif\|css\)\)!!g' {} +

代替ファイルを別の場所に配置するには、新しいファイルの名前を構成するために中間シェル接着剤が必要です。

find "$old_directory" -name '*.css' -o -name '*.js' \
     -exec sh -c 'sed -e '\''s![/A-Za-z0-9:._-]*/\([A-Za-z0-9:._-]*\.\(png\|jpg\|gif\|tif\|css\)\)!!g'\' <"$0" >"/new/directory/$0"' {} \;

'\''一重引用符で囲まれたシェルの断片に一重引用符を挿入する方法を参照してください。一括してできるだけ多くのファイルに対してコマンドを実行する-exec … {} \;のとは異なり、各ファイルに対して一度コマンドを実行することを意味します。-exec … {} +

おすすめ記事