使用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排序按修改时间对文件进行排序

从按大小排序文件的步骤中,您可能会遇到需要按修改时间对文件进行排序的用例。例如,您忘记了创建文件的名称,只记得您上次修改文件的时间。

运行下面的命令,其中-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-n~/data/scores.txt 文件中的数字。

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

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

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

通过Bash排序查找和排序文件通过文件扩展名

在前面的示例中,你一直在运行单个命令(lssort)。但在编程中,你可能经常需要将两个或多个命令结合在一起使用。怎么做呢?通过将一个命令管道到另一个命令。

运行以下命令来在工作目录中查找所有的 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/