Kurz zusammengefasst:

Kurz zusammengefasst:

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 .jsErweiterung richtig verarbeite?

Bearbeiten

Kurz zusammengefasst:

foo.barWie kann ich eine gegebene Zeichenfolge erhalten foo-orig.bar?

Bearbeitung2:

Ich füge die -origErweiterung 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.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

Antwort1

Sie könnten Folgendes Bashverwenden 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 cutund revetwa 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 .origan den Dateinamen anhängen würden, sodass logo.svgdaraus würde logo.svg.orig.

verwandte Informationen