Сортировка имен файлов с числом разделителей ' -'

Вот решение, которое мне помогло:

  1. Добавить драйверы не -AMD в черный список в файле/etc/modprobe.d/radeon.conf:
blacklist radeon
  1. Подставьте в /etc/modprobe.d/amdgpu.confследующие утверждения:
options amdgpu si_support=1
options amdgpu cik_support=1

После этого сообщение об ошибке исчезло.

0
16.10.2021, 20:23
3 ответа

Возможно, было бы проще манипулировать списком файлов с помощью sed, чтобы захватить последнее поле и добавить его в начало:

sed -e 's/^.*-\([^-]*\)\.[^.]*/\1-&/g'

Теперь вы можете сортировать по первому полю фальшивого «имени файла», а после сортировки можно удалить лишние данные с помощью cut, пропуская первое поле.

cut -f2- -d-

Так:

ls | sed | sort | cut

Пример

Я создал этот небольшой каталог и потрогал в нем несколько файлов нулевой -длины:

Oct 17 01:06.
Oct 17 01:06..
Oct 17 01:06 201-ventosa-title-001.png
Oct 17 01:06 201-ventosa-title-002.png
Oct 17 01:06 201-ventosa-title-12.png
Oct 17 01:06 201-ventosa-title-17.png
Oct 17 01:06 201-ventosa-title-356.png
Oct 17 01:06 201-ventosa-title-91.png
Oct 17 01:06 333-ventosa-longer-title-this-time-77.jpg

ls | sed -e 's/^.*-\([^-]*\)\.[^.]*/\1-&/g' | sort -rn | cut -f2- -d-

дает, как и ожидалось,

201-ventosa-title-356.png
201-ventosa-title-91.png
333-ventosa-longer-title-this-time-77.jpg
201-ventosa-title-17.png
201-ventosa-title-12.png
201-ventosa-title-002.png
201-ventosa-title-001.png

(Удаление опции "r" из сортировки меняет порядок ).

Обратите внимание, что элемент «77» позиционируется правильно, даже если число находится в другом поле.

1
16.10.2021, 22:24

Оболочка zshимеет параметр оболочки с именем NUMERIC_GLOB_SORT. По умолчанию шаблоны подстановки сортируются по номерам.

Из не-zshснаряда:

zsh -o NUMERIC_GLOB_SORT -c 'printf "%s\n" /home/flora/edvart/docs/*.png'

или, используя квалификатор (n)glob, чтобы включить эту опцию оболочки только для данного шаблона,

zsh -c 'printf "%s\n" /home/flora/edvart/docs/*.png(n)'

Или передать шаблон в качестве аргумента вместо жесткого -кодирования его в zsh -cскрипте. Обратите внимание, что шаблон должен быть заключен в кавычки.

zsh -c 'printf "%s\n" ${~1}(n)' zsh '/home/flora/edvart/docs/*.png'

Тестирование:

$ ls -d *.png
schimmel-04.png   schimmel-08.png   schimmel-11.png   schimmel-3.png
schimmel-05.png   schimmel-09.png   schimmel-12.png
schimmel-06.png   schimmel-1.png    schimmel-13.png
schimmel-07.png   schimmel-10.png   schimmel-2.png
$ zsh -c 'printf "%s\n" ${~1}(n)' zsh '*.png'
schimmel-1.png
schimmel-2.png
schimmel-3.png
schimmel-04.png
schimmel-05.png
schimmel-06.png
schimmel-07.png
schimmel-08.png
schimmel-09.png
schimmel-10.png
schimmel-11.png
schimmel-12.png
schimmel-13.png

Если у вас есть дополнительные номера в пути к каталогу, это все равно будет работать, учитывая, что числа в пути к каталогу одинаковы.

1
17.10.2021, 07:30

Проблема возникла из-за того, что я использовал mawk 1.3.3 -17. Версия 1.3.4 или более поздние версии могут использовать \0 в качестве разделителя записей со значением "нулевой символ". Старые выпуски mawk, BSD awk, Busybox awk, Plan 9 awk и т. д. все обрабатывают строку \0в RSтак, как если бы RSбыла пустой строкой, т. е. включается «режим абзаца» (двойной перевод строки разграничить записи ).

0
18.10.2021, 16:54

Теги

Похожие вопросы