У меня проблемы с программами, которые читают файлы в неправильном порядке, а также выводят их в нежелательном порядке с помощью таких утилит, как 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
Он читает 100 раньше, чем 11, даже с нулем в начале.
В идеале, он должен читать их в правильном порядке от 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
ОС: Arch Linux, FS: ext4
Что я могу сделать с настройками среды или чем-то еще в дистрибутиве Linux для этого?
find . -maxdepth 1 -type f -name '*.mkv' -print0 | sort -Vz | xargs -0r mpv
Это использует find
для вывода разделенного NUL списка всех имен файлов, соответствующих '* .mkv' в текущем каталоге. , затем GNU sort
(с -z
или - с завершающим нулем
для ввода с разделением NUL и -V
или ) --version-sort
для сортировки имен файлов) и, наконец, xargs -0r mpv
для запуска mpv
со всеми именами файлов в отсортированном порядке в качестве аргументов.
Это будет работать с любым именем файла, даже с пробелами, переводом строки или метасимволами оболочки в имени.
Насколько мне известно, только GNU sort
и FreeBSD sort
в настоящее время поддерживают параметр -z
или - завершающийся нулем
.