1

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

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 .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .