Filenames

對名稱的一部分進行排序

  • May 10, 2020

我有多個具有相同前綴但前綴未知的名稱。

我只想按名稱中的數字排序。

IE

abcd_006-123
abcd_006-232
bbcd_w_006-112

所以bbcd_w_006-112應該是第一個

謝謝

使用zsh,您可以定義一個全域排序函式,例如:

digitsOnly() REPLY=${REPLY//[^0-9]} # removes all non-digits

然後將其用作:

print -rC1 -- *(no+digitsOnly)

在那裡,nglob 限定符為numericglobsort那個 glob 擴展轉換選項,並o+function根據.$REPLY``function

print -rC1在 olumn 上列印其參數raw 1 c

請記住,如果您使用ls,ls會在列印之前對文件列表進行排序(預設按字母順序)。使用 GNU 實現ls,可以通過以下-U選項避免排序:

ls -ldU -- *(no+digitsOnly)

您可以使用以下方法執行類似操作perl

perl -le 'sub digitsOnly {$_=shift; s/\D//gr};
         print for sort {digitsOnly($a) <=> digitsOnly($b)} <*>'

或者在該文件列表上執行命令:

perl -l0e 'sub digitsOnly {$_=shift; s/\D//gr};
          print for sort {digitsOnly($a) <=> digitsOnly($b)} <*>' |
  xargs -r0 ls -ldU --

引用自:https://unix.stackexchange.com/questions/585718