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