Jak poprawnie obsługiwać rozszerzenie .js w skrypcie bash?


1

Mam następujący skrypt 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

Ma porównać dwa pliki (obliczając ich skrót skrótu MD5), a następnie zgłosić, czy są różne. Pobiera pliki do porównania z listy.

Problem polega na tym, że jeśli plik, który próbuję odczytać, to np.

path/to/foo-orig.js

skrypt wyszuka plik pod adresem

path/to/foo.js-orig

i oczywiście powoduje to błąd i kończy się niepowodzeniem.

Jak poprawić ten błąd w skrypcie, aby .jspoprawnie obsługiwać rozszerzenie?

Edytować

TL; DR:

Biorąc pod uwagę ciąg, foo.barjak mogę uzyskać foo-orig.bar?

Edycja2:

Dodam -origrozszerzenie, ponieważ ten projekt wymaga szablonu, który jest regularnie aktualizowany przez firmę zewnętrzną, a następnie nakładam na niego moje zmiany. Chcę więc śledzić, jakie pliki zmieniają, aby w razie potrzeby móc wrócić i dostosować kod.

lista-plików-do-porównania.txt wygląda następująco.

lista-plików-do-porównania.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

Dlaczego dodajesz -origw pierwszej kolejności? Jak to list-of-files-to-compare.txtwygląda?
Arkadiusz Drabczyk

@ArkadiuszDrabczyk: Czy zmiany pomagają odpowiedzieć na twoje pytania?
Mowzer

Odpowiedzi:


1

W Bashmożna użyć Pattern substitution:

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

Jeśli chcesz być bardziej ogólny, możesz najpierw uzyskać rozszerzenie cuti revtak:

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

A następnie zamień na sed:

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

Byłoby łatwiej, gdybyś dołączył .orignazwę pliku, aby tak logo.svgsię stało logo.svg.orig.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.