我一直在阅读各种有关Stack Overflow的类似问题,但在创建符号链接时仍然遇到困难,该符号链接已成功创建,指向给定目标目录中的最新目录。
这个故事的背景是,我们有一个部署脚本,该脚本需要在通过符号链接引用的目录中使用最新发行版。
为了尝试这种结构,我创建了一个简单的目录“ testSymLinks / target /”,并将目标的以下子目录分别为“ test1 /”,“ test2 /”等。因此总的来说,我将其作为我的结构:
testSymLinks/
--target/
**latest (symbolic link)
-----test1/
-----test2/ (created second / as the latest, new directory)
首先,我一直在尝试创建符号链接“ latest”(位于“ testSymLinks /”中),以指向“ target /”的最新子目录,即“ test2 /”,其中包含以下内容尝试:
尝试1:
ln -sf target/`ls -rt target | tail -n1` latest
尝试2:
ln -sf target/`ls -td -- */ | head -n 1` latest
这两种尝试都仍然具有指向目录“ target /”的符号链接“最新”,而不是到目前为止的“ target /”中的最新子目录。我一直在通过运行 ls -lrt 和 readlink -f Latest 进行检查。
我试图查看我在这里缺少的内容,希望能找到任何建议,解释和建议,以便我不仅能够解决我的问题,而且还了解为什么它在第一名。
答案 0 :(得分:0)
这对我来说可以创建一个指向文件夹中最后创建的目录的符号链接:
$ 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
答案 1 :(得分:0)
尝试
$ ln -sf "$(ls -1dt target/*/ | sed 1q)" latest
请注意,没有错误处理...
答案 2 :(得分:0)
因此,该任务由两个子任务组成:
第二步很容易,第一步很难。
这就是我最终得到的:
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
的别名,不建议在脚本中使用。反引号``也已弃用,请改用$( .. )
。