我撰寫了一個 shell 腳本,它從一個檔案夾及其所有子檔案夾中獲取所有檔案名,并在排序后將它們復制到剪貼板(洗掉所有路徑;我只需要一個包含數千個隨機命名檔案的簡單檔案串列內)。
我不知道如何讓 SORT 命令正確排序。意思是電子表格對事物進行排序的方式。或者你的 Mac finder 對事物進行分類的方式。
下劃線 > 數字 > 字母(不分大小寫)
有人知道怎么做嗎?Sort -n僅適用于以數字開頭的檔案,sort -f很接近,但以一種奇怪的方式將小寫和大寫分開,任何以數字開頭的東西都到處都是。Sort -V是最接近的,但是任何以下劃線開頭的東西都掉到了底部而不是頂部……我快瘋了。??
我已經嘗試了一周的時間來解決這個問題,但我嘗試過的任何組合都無法讓 sort 命令真正正確地排序。
幫助?
uj5u.com熱心網友回復:
如果我正確理解了這個問題,您想要自然排序順序 - 維基百科、人類排序:自然排序順序和macos - 當檔案夾包含數字和字符時查找器如何對檔案夾進行排序中所述的“自然排序順序”?.
使用 Linux sort(1)您需要-V( --version-sort) 選項來進行“自然”排序。您還需要-f( --ignore-case) 選項來忽略字母的大小寫。因此,假設檔案名每行存盤在一個名為的檔案中,files.txt您可以生成一個串列(大部分)以您想要的方式排序:
sort -Vf files.txt
但是,sort -Vf在我的系統上的數字和字母之后排序下劃線。我嘗試過使用不同的語言環境(請參閱如何在當前終端的會話中設定語言環境?),但沒有成功。我看不到用sort選項改變它的方法(但我可能遺漏了一些東西)。
字符.和~似乎始終排在數字和字母之前sort -V。解決該問題的一種可能方法是將下劃線與其中一個交換,排序,然后再次交換。例如:
tr '_~' '~_' <files.txt | LC_ALL=C sort -Vf | tr '_~' '~_'
似乎在我的系統上做你想做的事。我已經明確設定了sort命令的語言環境,LC_ALL=C ...因此它在其他系統上的行為應該相同。(請參閱為什么在每臺機器上的排序都不相同?。)
uj5u.com熱心網友回復:
看來你想sort按字典順序和折疊大小寫,所以它是sort -df.
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/482223.html
