![要約:](https://rvso.com/image/1575976/%E8%A6%81%E7%B4%84%3A.png)
次の 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 は次のようになります。
比較するファイルのリスト.txtpublic/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
。