1 votes

Comment gérer correctement une extension .js dans bash script ?

J'ai le bash script suivant.

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

Il est censé comparer deux fichiers (en calculant leur condensé de hachage MD5) puis signaler s'ils sont différents. Il récupère les fichiers à comparer dans une liste.

Le problème est que si le fichier que j'essaie de lire se trouve à, disons,

path/to/foo-orig.js

le script cherchera le fichier à

path/to/foo.js-orig

et, bien évidemment, cela déclenche une erreur et échoue.

Comment puis-je corriger ce bogue dans mon script de manière à gérer la .js correctement ?

Modifier

TL;DR :

Étant donné une chaîne de caractères foo.bar comment puis-je obtenir foo-orig.bar ?

Edit2 :

J'ajoute le -orig extension parce que ce projet prend un modèle qui est régulièrement mis à jour par un tiers, puis j'y superpose mes modifications. Je veux donc garder la trace des fichiers qu'ils modifient afin de pouvoir revenir en arrière et adapter mon code si nécessaire.

Le fichier list-of-files-to-compare.txt ressemble à ce qui suit.

liste-de-fichiers-à-comparer.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

0 votes

Pourquoi ajoutez-vous -orig en premier lieu ? Comment le list-of-files-to-compare.txt ressembler ?

0 votes

@ArkadiuszDrabczyk : Les modifications apportées aident-elles à répondre à vos questions ?

1voto

Arkadiusz Drabczyk Points 2334

Unter Bash vous pourriez utiliser Pattern substitution :

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

Si vous voulez être plus générique, vous pouvez d'abord obtenir une extension avec cut y rev comme ça :

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

Et ensuite le remplacer par sed :

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

Ce serait plus facile si tu ajoutais .orig au nom du fichier afin que logo.svg deviendrait logo.svg.orig .

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X