簡體   English   中英

UNIX:按編號/版本對文件進行排序,不使用0填充

[英]UNIX: Sort files by number/version without 0 padding

最終,我想將最新版本設置為環境變量,因此補充所選答案(這為我提供了正確的排序):

export LATEST_VERSION=$(printf '%s\n' * | sort -rV | head -1)

我有一個目錄,其中包含以下目錄名稱:

ls -1r .
2.0
1.8
16.1
16.0
15.5
15.0
14.5
14.1
14.0
1.3
1.2
1.1.5
1.1.3
1.1.2

我想對它們進行排序以獲得最新版本:

ls -1r . | head -1
16.1

因此基礎訂單應如下所示:

16.1
16.0
15.5
15.0
14.5
14.1
14.0
2.0
1.8
1.3
1.2
1.1.5
1.1.3
1.1.2

任何幫助將不勝感激。 越簡單越好,但我對任何解決方案都持開放態度。 謝謝!

現代GNU排序提供-V標志,用於根據版本號規則進行排序:

$ printf '%s\n' * | sort -rV
16.1
16.0
15.5
15.0
14.5
14.1
14.0
2.0
1.8
1.3
1.2
1.1.5
1.1.3
1.1.2

注意,上面沒有使用ls 作為一般規則, 您不應解析ls(1)的輸出

文檔

man sort

-V, - version-sort
文本中的自然類型(版本)數字

以上內容來自GNU手冊頁。

FreeBSD的排序也支持-V

OSX

Apple的排序是從2005年開始的GNU排序,早於對-V選項的支持。 可以在這里找到解決方法。 (帽子提示:l'L'l,mklement0)

FWIW,我現在在Mac OS,並沒有啟動到linux進行測試。 但是,看起來像使用數字選項的排序有聰明才能做到:

但是,我有一個包含子目錄的目錄,並且ls嚴重排序:

/Users/thedave/tmp $ ls -1r
2.0
16.1.12
16.1
16.0
15.5
15.0
14.5
14.1
14.0
1.8
1.3
1.2
1.1.5
1.1.3
1.1.2
1.1
1.0.1
1.0

sort(1)接受'-n'表示數字,' - r'表示反向:

/Users/thedave/tmp $ ls | sort -rn
16.1.12
16.1
16.0
15.5
15.0
14.5
14.1
14.0
2.0
1.8
1.3
1.2
1.1.5
1.1.3
1.1.2
1.1
1.0.1
1.0

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM