Debian

以 Debian 為基礎的 MySQL Docker 映像中的文件排序錯誤

  • October 19, 2021

我的問題相對簡單,因為我嘗試在 Flyway CLI 的幫助下進行遷移。

這裡的問題是,系統以錯誤的順序對遷移文件進行排序,並且我的新文件沒有被視為最新版本。這些文件與 POM 具有相同的版本,因此我們知道哪個版本發生了哪些更改。

目前版本是 1.4.11,但它被視為舊版本。

V1_4_11.001應該比V1_4_7.001

為什麼會這樣?如何在不使用 outOfOrder 標誌的情況下修復它?完全相同的文件在我的 MacBook 上的順序正確。

-rw-r--r-- 1 501 staff  226 Oct 18 16:02 V1_1_0__patch.sql  
-rw-r--r-- 1 501 staff 3174 Oct 18 16:02 V1_2_0__patch.sql  
-rw-r--r-- 1 501 staff 1774 Oct 18 16:02 V1_2_2__patch.sql  
-rw-r--r-- 1 501 staff  130 Oct 18 16:02 V1_4_0.001__merge_skill_level_godlike.sql  
-rw-r--r-- 1 501 staff  111 Oct 18 16:02 V1_4_0.002__modify_publications.sql  
-rw-r--r-- 1 501 staff 2149 Oct 18 16:02 V1_4_0.003__create_v_competence_by_experience.sql  
-rw-r--r-- 1 501 staff   55 Oct 18 16:02 V1_4_11.001__add_profile_updated_on.sql  // Newest version
-rw-r--r-- 1 501 staff  712 Oct 18 16:02 V1_4_7.001__add_duration.sql

問題是ls它根據文件名的“詞典”排序順序對其輸出進行排序。按照這個順序,V1_4_11在之後V1_4_1和之前V1_4_2等。

由於您使用的是 Debian,因此有一個標誌-v可以滿足ls您的要求:

-v 文本中(版本)數字的自然排序

例如,如果我根據您的範例創建空文本文件,則“正常”輸出順序為:

myuser@myhost:~$ ls -l
-rw-r--r-- 1 myuser mygroup 0 Okt 19 00:47 V1_1_0__patch.sql  
-rw-r--r-- 1 myuser mygroup 0 Okt 19 00:47 V1_2_0__patch.sql  
-rw-r--r-- 1 myuser mygroup 0 Okt 19 00:47 V1_2_2__patch.sql  
-rw-r--r-- 1 myuser mygroup 0 Okt 19 00:47 V1_4_0.001__merge_skill_level_godlike.sql  
-rw-r--r-- 1 myuser mygroup 0 Okt 19 00:47 V1_4_0.002__modify_publications.sql  
-rw-r--r-- 1 myuser mygroup 0 Okt 19 00:47 V1_4_0.003__create_v_competence_by_experience.sql  
-rw-r--r-- 1 myuser mygroup 0 Okt 19 00:47 V1_4_11.001__add_profile_updated_on.sql
-rw-r--r-- 1 myuser mygroup 0 Okt 19 00:47 V1_4_7.001__add_duration.sql

如果我使用-v標誌,它會得到:

myuser@myhost:~$ ls -lv
-rw-r--r-- 1 myuser mygroup 0 Okt 19 00:47 V1_1_0__patch.sql  
-rw-r--r-- 1 myuser mygroup 0 Okt 19 00:47 V1_2_0__patch.sql  
-rw-r--r-- 1 myuser mygroup 0 Okt 19 00:47 V1_2_2__patch.sql  
-rw-r--r-- 1 myuser mygroup 0 Okt 19 00:47 V1_4_0.001__merge_skill_level_godlike.sql  
-rw-r--r-- 1 myuser mygroup 0 Okt 19 00:47 V1_4_0.002__modify_publications.sql  
-rw-r--r-- 1 myuser mygroup 0 Okt 19 00:47 V1_4_0.003__create_v_competence_by_experience.sql  
-rw-r--r-- 1 myuser mygroup 0 Okt 19 00:47 V1_4_7.001__add_duration.sql
-rw-r--r-- 1 myuser mygroup 0 Okt 19 00:47 V1_4_11.001__add_profile_updated_on.sql

但是,請注意,這實際上只是ls命令輸出文件的順序;它與文件在文件系統上的內部組織方式無關。此外,您不應嘗試解析 的輸出ls以辨識最新文件;如果這是最終目標,還有其他方法可以做到這一點(但這取決於您使用的外殼以及您想要做什麼)。

引用自:https://unix.stackexchange.com/questions/673806