按照与 Finder 中相同的顺序获取终端中的文件列表

按照与 Finder 中相同的顺序获取终端中的文件列表

我有一个包含大约 1,000 个图像文件的文件夹。我需要创建一个它们的列表。我在某个地方看到,如果我进入终端并 cd 进入文件夹,我所要做的就是输入

ls > 列表.csv

生成一个列表。问题是,此列表与我在 Finder 中看到的文件的顺序不同。例如,在 Finder 中,第一张图像是 16_left.jpg。然而,生成的 list.csv 文件中的第一张图像是 10017_left.jpg,而 16_left.jpg 一直紧贴在 15975_right.jpg 和 16007_right.jpg 之间。

我可以看到,在 Finder 中,它认为数字 16 是文件中最小的数字,并将其放在顶部,而 list.csv 文件不是按整个数字本身,而是按从左到右的每个数字对列表进行排序。

如何使 list.csv 与 Finder 的顺序相同?

答案1

lsshell globs 默认按名称按词法对文件列表进行排序。

GNU 实现ls有一个-v选项版本sort 在这里会对您有所帮助,但是ls在 macos 中没有等效项(它-v用于其他内容(逐字))。

GNU 实现也sort有一个-V选项版本种类。 macossort确实复制了那个(BSDsort曾经是 GNU sort,所以重写了它们的人保留了 API)。

因此,如果当前工作目录中的所有文件名都没有换行符。

ls | sort -V

会给你一个数字顺序。

在 zsh shell 中,该numericglobsort选项(使用 启用set -o numericglobsort)可用于默认情况下按数字排序的 glob 扩展,或者您可以使用nglob 限定符在每个 glob 的基础上选择该顺序:

print -rC1 -- *.jpg(Nn)

(这里还使用Nullglob 限定符,如果没有匹配则不会抱怨)将print raw on 1 Column 名称以 结尾的非隐藏文件.jpg,按数字排序。

不过,要获取 csv 格式的列表,您需要类似以下内容:

(){ print -rC1 -- \"${^argv//\"/\"\"}\"; } *.jpg(Nn)

也就是说,将文件名用引号引起来,并将"文件名中的 s 转义为"".

相关内容