Wie behandelt man eine .js-Erweiterung korrekt im Bash-Skript?

586
Mowzer

Ich habe das folgende Bash-Skript.

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 

Es soll zwei Dateien vergleichen (durch Berechnen ihres MD5-Hash-Digests) und dann melden, wenn sie sich unterscheiden. Die zu vergleichenden Dateien werden aus einer Liste abgerufen.

Das Problem ist, dass, wenn die Datei, die ich zu lesen versuche, bei

path/to/foo-orig.js 

Das Skript sucht nach der Datei unter

path/to/foo.js-orig 

und offensichtlich wirft dies einen Fehler aus und schlägt fehl.

Wie kann ich diesen Fehler in meinem Skript korrigieren, damit ich die .jsErweiterung richtig handle ?

Bearbeiten

TL; DR:

foo.barWie bekomme ich einen String foo-orig.bar?

Edit2:

Ich füge die -origErweiterung hinzu, da für dieses Projekt eine Vorlage benötigt wird, die regelmäßig von einem Drittanbieter aktualisiert wird, und dann werden meine Änderungen überlagert. Ich möchte also nachverfolgen, welche Dateien sie ändern, damit ich bei Bedarf meinen Code anpassen kann.

list-of-files-to-compare.txt sieht wie folgt aus.

Liste der zu vergleichenden Dateien.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
Warum fügen Sie überhaupt "-orig" hinzu? Wie sieht `list-of-files-to-compare.txt` aus? Arkadiusz Drabczyk vor 5 Jahren 0
@ArkadiuszDrabczyk: Helfen die Änderungen bei der Beantwortung Ihrer Fragen? Mowzer vor 5 Jahren 0

1 Antwort auf die Frage

0
Arkadiusz Drabczyk

In Bashkönnten Sie verwenden Pattern substitution:

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

Wenn Sie generischer sein möchten, können Sie zuerst eine Erweiterung mit cutund revso erhalten:

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

Und dann ersetzen Sie es mit sed:

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

Es wäre einfacher, wenn du .origden Dateinamen anhängen logo.svgwürdest logo.svg.orig.