linux - 设置使用实用程序读取或输出文件的顺序(排序)

linux - 设置使用实用程序读取或输出文件的顺序(排序)

我遇到了以下问题:程序以错误的顺序读取文件,并且使用ls.

我已经尝试了一些LC_COLLATE选项,但没有一个符合我所寻求的偏好,所以我想我还可以做更多的事情。

产生错误顺序的命令示例:

user@host: /home/user/Video $ mpv *.mkv

/home/user/Video 中有 150 个文件,以下是前 12 个文件,来自程序的命令如下mpv *.mkv所示:

TVSeriesName - 01.mkv
TVSeriesName - 02.mkv
TVSeriesName - 03.mkv
TVSeriesName - 04.mkv
TVSeriesName - 05.mkv
TVSeriesName - 06.mkv
TVSeriesName - 07.mkv
TVSeriesName - 08.mkv
TVSeriesName - 09.mkv
TVSeriesName - 10.mkv
TVSeriesName - 100.mkv
TVSeriesName - 101.mkv

即使有前导零,它在读取 11 之前先读取 100。

理想情况下,即使没有前导零,它也应该以正确的 1-150 顺序读取它们。

我想要的是有一个通用的文件读取和排序顺序,类似于ranger文件管理器的默认顺序。

例子:

.1-hiddendir/
.2-hiddendir/
.a-hiddendir/
.b-hiddendir/
.C-hiddendir/
.d-hiddendir/
.E-hiddendir/
1-dir/
2-dir/
A-dir/
b-dir/
c-dir/
D-dir/
.1-dotfile
.2-dotfile
.a-dotfile
.b-dotfile
.C-dotfile
1-file
2-file
a-file
B-file
c-file

操作系统:拱门Linux,FS:外部4

我可以通过 Linux 发行版中的环境设置或其他内容来实现此目的吗?

答案1

find . -maxdepth 1 -type f  -name '*.mkv' -print0 | sort -Vz | xargs -0r mpv

这用于find输出当前目录中与“*.mkv”匹配的所有文件名的 NUL 分隔列表,然后是 GNU sort(使用-z--zero-terminated用于 NUL 分隔输入和-V--version-sort对文件名进行排序),最后使用所有文件名xargs -0r mpv运行mpv按参数的排序顺序。

这适用于任何文件名,甚至是名称中带有空格、换行符或 shell 元字符的文件名。

AFAIK,目前只有 GNUsort和 FreeBSDsort支持-zor--zero-terminated选项。

相关内容