以 Debian 为基础的 MySQL Docker 镜像中的文件顺序错误

以 Debian 为基础的 MySQL Docker 镜像中的文件顺序错误

我的问题相对简单,因为我尝试在 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

答案1

问题是ls根据a对其输出进行排序“字典顺序”排序文件名。按照这个顺序,V1_4_11先于V1_4_1后,V1_4_2等等。

-v由于您使用的是 Debian,因此有一个标志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为了识别最新的文件;如果这是最终目标,还有其他方法可以做到这一点(但这取决于您使用的 shell 以及您到底想要做什么)。

相关内容