2

Angular 2 CLI を使用してアプリをビルドすると、次のような名前の出力が得られます。

inline.d41d8cd.bundle.js
main.6d2e2e89.bundle.js

私が探しているのは、ファイルの名前を変更する bash スクリプトを作成し、最初の 2 つの数字の間の数字を.特定の一般的な文字列に置き換えることです。sed を含むいくつかのことを試しましたが、動作させることができませんでした。これを機能させるためのbashスクリプトを提案できる人はいますか?

4

3 に答える 3

2

純粋bash regExに変数を使用=~(以降サポートbash 3.0)

#!/bin/bash

string_to_replace_with="sample"

for file in *.js
do
    [[ $file =~ \.([[:alnum:]]+).*$ ]] && string="${BASH_REMATCH[1]}" 
    mv -v "$file" "${file/$string/$string_to_replace_with}"
done

指定された入力ファイルに対して、スクリプトを実行します

$ bash script.sh
inline.d41d8cd.bundle.js -> inline.sample.bundle.js
main.6d2e2e89.bundle.js -> main.sample.bundle.js
于 2016-12-13T14:13:46.387 に答える
2

短く、強力で効率的:

この ( ) ツールを使用します。Perl正規表現を使用します:

rename 's/\.\X{4,8}\./.myString./' *.js

また

rename 's/\.\X+\./.myString./' *.js
于 2016-12-13T14:18:32.410 に答える
1

純粋な bash オプション:

shopt -s extglob    # so *(...) will work
generic_string="foo"   # or whatever else you want between the dots
for f in *.bundle.js ; do
    mv -vi "$f" "${f/.*([^.])./.${generic_string}.}"
done

鍵は交換${f/.*([^.]./.${generic_string}.}です。パターンは、ドット ( )を含まない/.*([^.])./の最初の出現に一致し.<some text>.ます( man ページを参照)。置換は、それを必要な一般的な文字列に置き換えます。それ以外に、スペースがある場合は二重引用符で囲んでください。<some text>[^.].${generic_string}.

編集F. Hauri に感謝 - に-vi追加mv-v= 名前が変更されているものを表示します。-i= 上書き前のプロンプト ( man ページ)。

于 2016-12-13T14:08:57.320 に答える