我在目录中创建了 3 个文件,名称如下:
11 13 9
问题,因为我在
9
之后创建了文件 13
,当我执行 13
命令时,它被放置在文件 ls
之后。
您是否有任何想法让
ls
命令按数字顺序对文件进行排序,如下所示:
9 11 13
查看
man
页面中的 ls
。
从那里开始-
-v 文本中(版本)数字的自然排序。
您会发现命令
ls -v
可以满足您的要求。
如果您希望文件名位于不同的行,那么您可以执行
ls -1v
。
不幸的是,macOS 和 FreeBSD 上的
ls -v
不会对文件列表执行自然排序。 FreeBSD ls 根本不支持这个标志。在 macOS 上它可用于
强制打印未经编辑的非图形字符;当输出不输出到终端时,这是默认设置。
如果您非常需要 ls 实用程序的 GNU 扩展
-v
,您可以安装 GNU ls,然后使用 alias ls=gls
使用 GNU ls 而不是默认的 ls。 GNU ls 通常带有 coreutils
软件包,因此,例如,
brew install coreutils
pkg install coreutils
仅包含行但不包含列的列表:
ls -x
使用tr避免多行输出:
ls | tr "\n" " "
并确保准确地强制升序:
ls -v | tr "\n" " "
来自 linux.org 关于 ls 的一些有用且重要的信息。
如果您使用的是 MacOS,其中 - 正如@eris 所指出的 -
-v
不受支持,您可以将输出通过管道传输到 sort
来实现您想要的:
ls -1 | sort -n
请注意,这是数字 1,而不是小写 L。
ls -1
每行列出一个文件,但没有 -l
的附加列。这使得它适合通过管道传输到 sort
,其中 -n
是 --numeric-sort
的简写:“根据字符串数值进行比较”