長話短說:

長話短說:

我有以下 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

它應該比較兩個檔案(透過計算它們的 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

相關內容