DR:

DR:

Eu tenho o seguinte script 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

Ele deve comparar dois arquivos (computando seu resumo de hash MD5) e depois relatar se eles são diferentes. Ele obtém os arquivos para comparar em uma lista.

O problema é que se o arquivo que estou tentando ler estiver, digamos,

path/to/foo-orig.js

o script procurará o arquivo em

path/to/foo.js-orig

e, obviamente, isso gera um erro e falha.

Como corrijo esse bug em meu script para lidar com a .jsextensão corretamente?

Editar

DR:

Dada uma string, foo.barcomo posso obter foo-orig.bar?

Editar2:

Eu adiciono a -origextensão porque este projeto usa um modelo que é atualizado regularmente por terceiros e, em seguida, sobreponho minhas alterações a ele. Portanto, quero acompanhar quais arquivos eles alteram para poder voltar e adaptar meu código quando necessário.

list-of-files-to-compare.txt se parece com o seguinte.

lista de arquivos para comparar.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

Responder1

Em Bashvocê poderia usar Pattern substitution:

while IFS= read -r filename;
do
    echo ${filename/.js/-orig.js}
done < list-of-files-to-compare.txt

Se você quiser ser mais genérico, você pode primeiro obter uma extensão com cute revassim:

$ ext=$(echo public/assets/images/logos/logo.svg | rev | cut -d. -f1  | rev)
$ echo $ext
svg

E então substitua por sed:

$ echo public/assets/images/logos/logo.svg | sed "s,\.${ext}\$,-orig.${ext},"
public/assets/images/logos/logo-orig.svg

Seria mais fácil se você acrescentasse .origao nome do arquivo para que ele logo.svgse tornasse logo.svg.orig.

informação relacionada