Как правильно обрабатывать расширение .js в bash-скрипте?

334
Mowzer

У меня есть следующий скрипт 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правильно обрабатывать расширение?

редактировать

TL; DR:

Учитывая строку, foo.barкак я могу получить foo-orig.bar?

Edit2:

Я добавляю -origрасширение, потому что этот проект использует шаблон, который регулярно обновляется третьей стороной, и затем я накладываю на него свои изменения. Итак, я хочу отслеживать, какие файлы они меняют, чтобы я мог вернуться и адаптировать свой код при необходимости.

list-of-files-to-compare.txt выглядит следующим образом.

список-оф-файлов к compare.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
Почему вы добавляете `-orig`? Как выглядит `list-of-files-to-compare.txt`? Arkadiusz Drabczyk 5 лет назад 0
@ArkadiuszDrabczyk: правки помогают ответить на ваши вопросы? Mowzer 5 лет назад 0

1 ответ на вопрос

0
Arkadiusz Drabczyk

В Bashвы можете использовать Pattern substitution:

while IFS= read -r filename; do echo $ 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,\.$\$,-orig.$," public/assets/images/logos/logo-orig.svg 

Было бы проще, если бы вы добавили .origк имени файла, чтобы это logo.svgстало logo.svg.orig.

Похожие вопросы