![요약:](https://rvso.com/image/1575976/%EC%9A%94%EC%95%BD%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
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는 다음과 같습니다.
파일 목록-비교.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