我遇到了以下问题:程序以错误的顺序读取文件,并且使用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
支持-z
or--zero-terminated
选项。