Contents

在Linux中每行列出一个文件名

1. 概述

在 Linux 命令行下工作时,列出目录下的文件可能是最常见的操作之一。

有时,我们希望获取特定格式的文件列表——例如,每行一个文件。

在这个快速教程中,我们将看到如何实现这一点。

2. 使用ls命令和*-1*选项

当我们想要列出目录中的文件时,*ls *命令可能是我们能想到的第一个命令。但是,如果我们在没有任何选项的情况下运行该命令,则 ls命令将在一行中输出文件名。一个例子将清楚地解释它:

$ ls
aDir  file1.txt  file2.txt  file3.txt

当然,我们知道常用的*-l选项可以让ls*将每个文件名打印在一行中。确实如此。但是,其他信息,例如权限和文件所有者,将与文件名一起出现在输出中:

$ ls -l
total 0
drwxr-xr-x 2 kent kent 40 Sep 30 21:07 aDir
-rw-r--r-- 1 kent kent  0 Sep 30 21:07 file1.txt
-rw-r--r-- 1 kent kent  0 Sep 30 21:07 file2.txt
-rw-r--r-- 1 kent kent  0 Sep 30 21:07 file3.txt

如果我们只想查看文件名和每行一个文件,我们可以 使用-1选项执行ls*命令*:

$ ls -1
aDir
file1.txt
file2.txt
file3.txt

如果我们想显示隐藏文件 (也称为 dot-files ),我们可以在上面的命令中添加*-a*选项:

$ ls -1a
.
..
aDir
file1.txt
file2.txt
file3.txt
.hidden

3. 选择终端以外的ls输出目标

我们了解到,不带任何选项的 ls命令将在一行中打印文件名:

$ ls -a
.  ..  aDir  file1.txt  file2.txt  foo  .hidden

此外,我们知道如果我们通过管道将一些输出传递给 cat命令,它会按原样打印输出:

$ echo "This is a beautiful string." | cat
This is a beautiful string.

现在,让我们将ls命令的结果通过管道传递给cat命令,看看会发生什么:

$ ls -a | cat
.
..
aDir
file1.txt
file2.txt
file3.txt
.hidden

正如我们在上面的输出中看到的,每个文件名都神奇地排成一行。

这是因为ls命令根据输出目标(例如终端、重定向或管道)调整输出。

如果输出目标不是终端,则-1选项将是ls*命令*的默认选项。因此,ls将每行输出一个文件名到目标。

我们已经解决了当输出目标是管道时,ls命令将每行输出一个文件。

接下来,让我们看另一个ls输出到重定向的例子:

$ ls -a > /tmp/ls.output
$ cat /tmp/ls.output
.
..
aDir
file1.txt
file2.txt
file3.txt
.hidden

如示例所示, 当目标是文件重定向时, ls 每行输出一个文件。