Filenames
對名稱的一部分進行排序
我有多個具有相同前綴但前綴未知的名稱。
我只想按名稱中的數字排序。
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)
在那裡,
n
glob 限定符為numericglobsort
那個 glob 擴展轉換選項,並o+function
根據.$REPLY``function
print -rC1
在 olumn 上列印其參數r
aw1
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 --