如何在不同行中获取文件名列表

134

我想获取一个目录中所有文件的列表,就像使用 ls 命令一样,使得每个文件名都在单独的一行上,不需要使用 ls -l 命令提供的额外信息。我查看了 ls --help,但没有找到解决方案。我尝试过:

ls -l | cut --fields=9 -d" "

但是ls命令在列与列之间的空格数量上没有固定规律。有没有办法在一行内做到这一点?

10个回答

290

ls -1

这是数字 1,不是小写字母 L。


5
我在文档中看到了这个:交叉-x,逗号-m,水平-x,长-l,单列-1,详细-l,垂直-C。我不确定他们是如何得出其中一些的。 - Alexander Taylor

26

ls -1。来自于帮助文档:

-1 每行只列出一个文件

可以在Cygwin和FreeBSD上运行,因此可能不太特定于GNU。


同样适用于Ubuntu。谢谢。 - Yonatan Simson

15

不使用管道的解决方案 :-)

 ls --format single-column

注意长选项仅在GNU核心实用工具中受支持,而BSD ls仅支持短参数-1


6
也许:
ls | awk '{print $NF}'

注意:文件名中包含空格(例如“apples and pears.jpg”)的文件将变成“pears.jpg”。 - oknate

5

ls | cat ... or possibly, ls -1


4
请避免无谓地使用“猫” :) - jhwist
3
在这种情况下,“cat”并不无用。它将“ls”命令的输出格式化为一列,就像OP所要求的那样。 - Felix Eve

3

试试这个:

$ ls | xargs -n num

这里的num是你想要列出的列数。

3
使用sed命令列出单个列。
ls -l | sed 's/\(^[^0-9].\*[0-9]\*:[0-9]\*\) \(.*\)/\2/'

ls -l 产生的输出与您的整个答案相同。不确定 sed 在这里添加了什么... - Felix Eve

1

首先,您可以使用此命令。它将每个文件显示为一行。

ls -l | sed 's/(.* )(.*)$/\2/'

或者您也可以使用以下命令:

find . -maxdepth 1 | sed 's/.///'

两种方法都是相同的。


我收到了错误信息 sed: -e expression #1, char 16: invalid reference \2 on \s' command's RHS`。 - Felix Eve

0

这也可以工作:echo -e "\n$(ls)"


-1

这也可以

ls -l | awk '{print $NF}'

2
这实际上与Eelvex的答案有什么不同吗? - Uyghur Lives Matter

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接