![TL;DR:](https://rvso.com/image/1575976/TL%3BDR%3A.png)
Tengo el siguiente 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
Se supone que debe comparar dos archivos (calculando su resumen de hash MD5) y luego informar si son diferentes. Obtiene los archivos para comparar de una lista.
El problema es que si el archivo que estoy intentando leer está en, digamos,
path/to/foo-orig.js
el script buscará el archivo en
path/to/foo.js-orig
y, obviamente, esto arroja un error y falla.
¿Cómo corrijo este error en mi script para manejar la .js
extensión correctamente?
Editar
TL;DR:
Dada una cadena foo.bar
, ¿cómo puedo obtenerla foo-orig.bar
?
Editar2:
Agrego la -orig
extensión porque este proyecto toma una plantilla que un tercero actualiza periódicamente y luego superpongo mis cambios. Por lo tanto, quiero realizar un seguimiento de los archivos que cambian para poder volver atrás y adaptar mi código cuando sea necesario.
list-of-files-to-compare.txt se parece a lo siguiente.
lista-de-archivos-para-comparar.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
Respuesta1
En Bash
usted podría utilizar Pattern substitution
:
while IFS= read -r filename;
do
echo ${filename/.js/-orig.js}
done < list-of-files-to-compare.txt
Si quieres ser más genérico, primero puedes obtener una extensión con cut
algo rev
así:
$ ext=$(echo public/assets/images/logos/logo.svg | rev | cut -d. -f1 | rev)
$ echo $ext
svg
Y luego reemplácelo con sed
:
$ echo public/assets/images/logos/logo.svg | sed "s,\.${ext}\$,-orig.${ext},"
public/assets/images/logos/logo-orig.svg
Sería más fácil si agregara .orig
el nombre del archivo para que logo.svg
se convirtiera en logo.svg.orig
.