使用Bash Sort像老板一樣對文件進行排序

你正在尋找一種方法來組織你的文件並對它們執行一些操作嗎?在編程中,有許多情況下你需要對一些數據進行排序,比如一個文件列表。使用 Bash 的 sortls 命令來對文件進行排序將有助於保持組織。

在本教程中,你將學習到排序文件和文件內容的基礎知識。

讓我們開始排序吧!

先備知識

本教程使用 Ubuntu 20.04,但任何 Linux 發行版都可以使用。

Bash 按字母順序排序文件

在 Linux 中有很多種排序文件的方法,但讓我們專注於最常見的方式,按字母順序排序文件。

打開你的終端並運行下面的 ls -l 命令以按升序獲取目錄中文件的列表。 -l 標誌告訴 ls 命令以長列表格式打印返回的輸出。

ls -l
Bash Sort to Sort Files Alphabetically

默認情況下,ls 命令按升序列出文件。要反轉排序順序,將 -r 標誌傳遞給 ls -l 命令,像這樣:ls -lr。將 -r 標誌傳遞給 ls -l 命令將應用於本教程中的其他示例。

使用 Bash Sort 按大小排序文件

與其按字母順序排序文件,不如按文件大小排序。按大小排序文件在優先查看列表中最小或最大的文件時很方便。

要按大小排序文件,傳遞-S標誌以告訴ls命令按文件大小排序文件列表。

運行下面的命令以長列表格式(-lS)按文件大小排序列出文件(ls)。

ls -lS

下面,您可以看到命令按大小降序排序了文件(從最大到最小)。

要反轉排序順序(從最小到最大),添加-r標誌,像這樣:ls -lSr

Sorting Files by Size

通過Bash Sort按修改時間排序文件

從按大小排序文件前進,您可能會遇到需要按修改時間排序文件的用例。例如,您忘記了創建的文件名,只記得上次修改文件的時間。

運行下面的命令,其中-t參數告訴ls命令按修改時間排序文件。

ls -lt
Sorting Files in a Directory by Modification Time

按文件擴展名排序文件

當您正在尋找具有特定文件類型的文件時,按文件擴展名排序文件是理想的解決方案。

執行下面的命令,在工作目錄中列出文件(ls),並根據它們的擴展名排序(-lx)。

ls -lX

注意下面的命令根據它們的名稱以升序排序了具有相同擴展名的文件。

Sorting Files by File Extension

排序文本文件中的內容

到目前為止,您已經學會了在目錄中對文件進行各種排序的方法。將您的注意力從ls命令轉移到執行sort命令上。sort命令會根據您添加的標誌來對文件內容進行排序。但首先,您需要一個包含您將要修改的內容的文件。

執行以下命令以創建名為~/data/fruits.txt的文本文件,其中包含水果的名稱。-e標誌啟用反斜杠的解釋,以將每個單詞寫入新行(\n)。

echo -e "apple \nmango \nwatermelon \ncherry \norange \nbanana" > fruits.txt

現在執行以下命令來sort fruits.txt 中的每個單詞。

sort fruits.txt

如下所示,文件的內容按升序排序。

Sorting File’s Content Alphabetically in Ascending Order

沒有任何標誌,sort命令默認以升序對文件內容進行排序。要反轉排序順序,請將-r標誌添加到sort命令中,如下所示:sort -r fruits.txt。通過添加-r標誌以相反順序排序適用於本教程中的其他示例。

對文本文件中的數字列表進行排序

排序數字的命令與排序文件中的文本類似,但您將添加-n標誌。讓我們首先創建一個文件以演示如何對文件的內容進行數字排序。

運行以下命令以創建名為~/data/scores.txt的文件,其中包含隨機數,每個數位佔一行。

echo -e "45 \n69 \n52 \n21 \n3 \n5 \n78" > scores.txt

現在運行以下命令來sort ~/data/scores.txt 文件中的數字(-n)。

sort -n scores.txt

你可以在下面看到,按照从小到大的顺序列出的数字。

Sorting Numbers in a File

在文本文件中对版本号列表进行排序

也许你有一个文本文件中的版本号列表需要排序。如果是这样,添加--version-sort选项就可以搞定。

为了演示--version-sort选项的工作原理,请先创建一个文本文件。

运行下面的命令来创建一个名为~/data/versions.txt的文本文件,其中列出了随机的版本号,每个版本号占一行(\n)。

echo -e "1.0.0.1 \n 6.2.1.0 \n4.0.0.2" > versions.txt

现在运行下面的命令以在versions.txt文件中对版本号进行sort--version-sort)。--field-separator选项告诉sort命令,每个版本中的数字由点(.)分隔。你可以将字段分隔符更改为文本文件中列出的版本号中分隔数字的任何字符。

sort --version-sort --field-separator=. versions.txt
Sorting Version Numbers from a Text File

使用Bash Sort查找并按文件扩展名排序

在之前的示例中,你一直在运行单个命令(lssort)。但在编程中,你可能经常需要将两个或更多命令组合在一起。怎么做?通过pipelining将一个命令传递到另一个命令。

執行以下命令以在工作目錄中尋找所有 markdown 檔案(`-iname “*.md”`),並按字母降序排序(`sort -r`)。嘗試通過將 `*.md` 更改為其他文件擴展名來查找和排序其他文件。

find . -iname "*.md" | sort -r
Finding and Listing Files in Alphabetically Descending Order

如果您希望將排序後的輸出保存到文本文件而不是標準輸出到控制台,請添加 `–output` 選項,就像這樣:find . -iname "*.md" | sort -r --output=sorted.txt。`–output` 選項告訴 `sort` 命令創建一個輸出文件來存儲排序後的文件列表。

結論

本文的目的是教你如何在 Linux 機器上使用 Bash 命令進行不同方式的排序。你現在已經學會了對文件列表進行排序以及對文件內容進行排序。此外,你還應該知道如何通過管道連接不同的命令來進行更複雜的文件排序。

有了這些新學到的知識作為基礎,為什麼不創建腳本來自動化文件列表和文件內容的排序呢?

Source:
https://adamtheautomator.com/bash-sort/