簡體   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