![Kurz zusammengefasst:](https://rvso.com/image/1575976/Kurz%20zusammengefasst%3A.png)
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 Berechnung ihres MD5-Hash-Digests) und dann melden, ob sie unterschiedlich sind. Es ruft die zu vergleichenden Dateien aus einer Liste ab.
Das Problem ist, dass, wenn die Datei, die ich zu lesen versuche, sich beispielsweise an folgender Adresse befindet:
path/to/foo-orig.js
Das Skript sucht nach der Datei unter
path/to/foo.js-orig
und dies führt offensichtlich zu einem Fehler und schlägt fehl.
Wie korrigiere ich diesen Fehler in meinem Skript, damit ich die .js
Erweiterung richtig verarbeite?
Bearbeiten
Kurz zusammengefasst:
foo.bar
Wie kann ich eine gegebene Zeichenfolge erhalten foo-orig.bar
?
Bearbeitung2:
Ich füge die -orig
Erweiterung hinzu, weil dieses Projekt eine Vorlage verwendet, die regelmäßig von einem Drittanbieter aktualisiert wird, und dann überlagere ich sie mit meinen Änderungen. Ich möchte also verfolgen, welche Dateien geändert werden, damit ich bei Bedarf zurückgehen und meinen Code anpassen kann.
list-of-files-to-compare.txt sieht wie folgt aus.
Liste der zu vergleichenden Dateien.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
Antwort1
Sie könnten Folgendes Bash
verwenden Pattern substitution
:
while IFS= read -r filename;
do
echo ${filename/.js/-orig.js}
done < list-of-files-to-compare.txt
Wenn Sie allgemeiner vorgehen möchten, können Sie zunächst eine Erweiterung mit cut
und rev
etwa so erhalten:
$ ext=$(echo public/assets/images/logos/logo.svg | rev | cut -d. -f1 | rev)
$ echo $ext
svg
Und ersetzen Sie es dann durch sed
:
$ echo public/assets/images/logos/logo.svg | sed "s,\.${ext}\$,-orig.${ext},"
public/assets/images/logos/logo-orig.svg
Es wäre einfacher, wenn Sie .orig
an den Dateinamen anhängen würden, sodass logo.svg
daraus würde logo.svg.orig
.