Làm cách nào để xử lý phần mở rộng .js chính xác trong tập lệnh bash?


1

Tôi có kịch bản bash sau đây.

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

Bạn nên so sánh hai tệp (bằng cách tính toán thông báo băm MD5 của chúng) sau đó báo cáo nếu chúng khác nhau. Nó nhận được các tập tin để so sánh từ một danh sách.

Vấn đề là nếu tập tin tôi đang cố đọc, hãy nói,

path/to/foo-orig.js

đoạn script sẽ tìm tập tin tại

path/to/foo.js-orig

và, rõ ràng, điều này ném một lỗi và thất bại.

Làm cách nào để sửa lỗi này trong tập lệnh của tôi để tôi xử lý .jsphần mở rộng chính xác?

Chỉnh sửa

TL; DR:

Cho một chuỗi foo.barlàm thế nào tôi có thể nhận được foo-orig.bar?

Chỉnh sửa2:

Tôi thêm -origtiện ích mở rộng vì dự án này lấy một mẫu được cập nhật thường xuyên bởi bên thứ ba, sau đó tôi phủ lên các thay đổi của mình đối với nó. Vì vậy, tôi muốn theo dõi những tập tin họ thay đổi để tôi có thể quay lại và điều chỉnh mã của mình khi cần thiết.

list-of-files-to-notify.txt trông giống như sau.

list-of-files-to-notify.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

Tại sao bạn thêm -origvào ở nơi đầu tiên? Làm thế nào để list-of-files-to-compare.txttrông như thế nào?
Arkadiusz Drabchot

@ArkadiuszDrabchot: Các chỉnh sửa có giúp trả lời câu hỏi của bạn không?
Mowzer

Câu trả lời:


1

Trong Bashbạn có thể sử dụng Pattern substitution:

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

Nếu bạn muốn chung chung hơn, trước tiên bạn có thể nhận tiện ích mở rộng với cutrevnhư thế:

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

Và sau đó thay thế nó bằng sed:

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

Sẽ dễ dàng hơn nếu bạn gắn vào .origtên tệp để nó logo.svgtrở thành logo.svg.orig.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.