要約:

要約:

次の bash スクリプトがあります。

while IFS= read -r filename;
  do [[ $(md5 path/to/"$filename-orig") = $(md5 path/to/"$filename") ]] || echo $filename differs;
  done < path/to/list-of-files-to-compare.txt

これは、2 つのファイルを比較し (MD5 ハッシュ ダイジェストを計算して)、異なる場合は報告することを目的としています。比較するファイルはリストから取得します。

問題は、私が読み込もうとしているファイルが、例えば、

path/to/foo-orig.js

スクリプトは、次のファイルを探します。

path/to/foo.js-orig

そして、明らかに、これはエラーをスローして失敗します。

拡張機能を正しく処理できるように、スクリプト内のこのバグを修正するにはどうすればよいですか.js?

編集

要約:

文字列が与えられたら、foo.barどうすれば取得できますかfoo-orig.bar?

編集2:

このプロジェクトでは、サードパーティによって定期的に更新されるテンプレートを使用し、それに自分の変更をオーバーレイするため、拡張機能を追加します-orig。そのため、変更されたファイルを追跡しておき、必要に応じて戻ってコードを調整できるようにする必要があります。

list-of-files-to-compare.txt は次のようになります。

比較するファイルのリスト.txt
public/assets/images/logos/logo.svg
README.md
src/auth/Auth.js
src/auth/store/actions/login.actions.js
src/auth/store/actions/user.actions.js
src/auth/store/reducers/user.reducer.js
src/firebaseService/firebaseService.js
src/firebaseService/firebaseServiceConfig.js
src/fuse-configs/fuseNavigationConfig.js
src/fuse-configs/fuseRoutesConfig.js
src/index.js
src/main/content/components/ComponentsConfig.js
src/main/content/login/Login.js
src/store.js
src/store/actions/index.js
src/store/reducers/index.js

答え1

ではBash以下を使用できますPattern substitution:

while IFS= read -r filename;
do
    echo ${filename/.js/-orig.js}
done < list-of-files-to-compare.txt

より汎用的にしたい場合は、まず次のようにして拡張機能を取得しcutますrev

$ ext=$(echo public/assets/images/logos/logo.svg | rev | cut -d. -f1  | rev)
$ echo $ext
svg

そして、それを次のように置き換えますsed:

$ echo public/assets/images/logos/logo.svg | sed "s,\.${ext}\$,-orig.${ext},"
public/assets/images/logos/logo-orig.svg

.origファイル名に を追加してlogo.svgとすると簡単になりますlogo.svg.orig

関連情報