繁体   English   中英

如何创建指向目标目录中最新目录的符号链接?

[英]How to create a symbolic link that points to the latest directory in a target directory?

我一直在阅读各种 Stack Overflow 类似的问题,但我仍然无法创建一个成功创建的符号链接,该链接指向给定目标目录中的最新目录。

这背后的故事是,我们有一个部署脚本,需要在通过符号链接引用的目录中使用最新版本。

为了试验这个结构,我创建了一个简单的目录“testSymLinks/target/”,并将目标的以下子目录作为“test1/”、“test2/”等。所以总的来说我把这个作为我的结构:

testSymLinks/
--target/
**latest (symbolic link)
-----test1/
-----test2/ (created second / as the latest, new directory)

首先,我一直在尝试创建一个符号链接“最新”(位于“testSymLinks/”中)以指向“target/”的最新子目录“test2/”,并尝试进行以下尝试:

尝试 1:

ln -sf target/`ls -rt target | tail -n1` latest

链接,因为显然我还不能发布图片,我需要一个反引号 #NotNewbieFriendly

尝试 2:

ln -sf target/`ls -td -- */ | head -n 1` latest

链接,因为显然我还不能发布图片,我需要一个反引号 #NotNewbieFriendly

到目前为止,这两种尝试仍然具有指向目录“target/”而不是“target/”中的最新子目录的符号链接“最新”。 我一直在通过运行ls -lrtreadlink -f latest来验证。

链接,因为显然我还不能发布图片#NotNewbieFriendly

我试图看看我在这里遗漏了什么,并希望找到任何建议、解释和建议,这样我不仅可以解决我的问题,而且还可以理解为什么它首先不起作用。

这对我有用,可以创建指向文件夹中创建的最后一个目录的符号链接:

$ mkdir target/f
$ mkdir target
$ mkdir target/a
$ mkdir target/b
$ mkdir target/g
$ mkdir target/c
$ mkdir target/h
$ mkdir target/d
$ ls target
a  b  c  d  f  g  h
$ ln -s $(ls -t --group-directories-first target | head -n 1) target/latest
$ ls target -la
total 0
drwxrwxrwx 1 paulos paulos 4096 Apr 12 18:18 .
drwxrwxrwx 1 paulos paulos 4096 Apr 12 18:17 ..
drwxrwxrwx 1 paulos paulos 4096 Apr 12 18:17 a
drwxrwxrwx 1 paulos paulos 4096 Apr 12 18:17 b
drwxrwxrwx 1 paulos paulos 4096 Apr 12 18:17 d
drwxrwxrwx 1 paulos paulos 4096 Apr 12 18:17 f
drwxrwxrwx 1 paulos paulos 4096 Apr 12 18:17 g
drwxrwxrwx 1 paulos paulos 4096 Apr 12 18:17 h
lrwxrwxrwx 1 paulos paulos    1 Apr 12 18:18 latest -> d

尝试这个

$ ln -sf "$(ls -1dt target/*/ | sed 1q)" latest

请注意,没有错误处理...

所以任务由两个子任务组成:

  • 寻找最新的目录
  • 创建符号链接

第二步容易,第一步难。

这就是我最终的结果:

ln -sf "target/$(find target -type d -mindepth 1 -maxdepth 1 -printf "%T@ %f\n" |
    sort -n -k1 | tail -n1 | cut -d' ' -f2-)" latest

find打印target目录中的目录,其上次修改时间为 unix 时间戳%T@并打印以换行符分隔的目录名称$f 然后我使用第一个字段对列表进行数字排序,获取最后一行并删除时间戳。 之后,符号链接的创建保持不变。

我发现您的第一个解决方案有效,但是我建议至少将-1选项与ls 第二个创建指向target/target/test2的符号链接,您应该松开第一个target/ 请注意, ls是高度自定义的实用程序,主要是某些ls --color -F别名,不建议在脚本中使用。 不推荐使用反引号 ` `,请改用$( .. )

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM