요약:

요약:

다음 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이 프로젝트는 제3자가 정기적으로 업데이트하는 템플릿을 사용하기 때문에 확장을 추가한 다음 변경 사항을 여기에 오버레이합니다. 따라서 필요한 경우 다시 돌아가 코드를 조정할 수 있도록 어떤 파일이 변경되는지 추적하고 싶습니다.

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

관련 정보