Вместо синтаксического анализа ls
, и если вы можете положиться на внешнюю stat
утилиту и bash v4+ (для ассоциативных массивов ), вы могли бы собрать список файлов по inode, а затем собрать список самые последние индексные дескрипторы, затем создайте массив имен файлов:
shopt -s nocaseglob extglob
declare -a filesbyinode=()
for f in *.@(jpg|png); do filesbyinode[$(stat -c %i "$f")]=$f; done
[ ${#filesbyinode[@]} -gt 0 ] || return
declare wantedfiles=()
for inodes in $(stat -c '%Y %i' *.@(jpg|png) | sort -k1,1rn | awk '{print $2}' | head -10)
do
wantedfiles+=("${filesbyinode[$inodes]}")
done
declare -p wantedfiles
Первый шаг — установить две опции оболочки:
nocaseglob
--это позволяет подстановочному знаку jpg
также соответствоватьJPG
(и JpG
и...)extglob
--это позволяет использовать @(jpg|png)
, что означает :совпадающие имена файлов могут заканчиваться на jpg
илиpng
(в соответствии с nocaseglob
, выше)Затем мы создали пустой ассоциативный массив, который индексирует имена файлов по их инодам.
Последующий цикл for
строит массив filesbyinode
с индексами инодов (, результатом выполнения команды stat
), и именами файлов в качестве значений.
Если файлов нет, мы спасаемся с помощьюreturn
--корректируем это в соответствии с вашей ситуацией (возможно, if/else ).
Затем мы объявляем (обычный массив )для хранения интересующих нас файлов. Следующий цикл for
перебирает 10 самых последних инодов и добавляет соответствующие имена файлов в массив. 10 самых последних инодов определяются путем раскрытия того же подстановочного знака, что и раньше, но с запросом только времени модификации (в секундах с начала эпохи )и инодов; после сортировки по времени модификации в поле #1 (самый большой/самый последний первый ), мы отделяем иноды в поле #2 с awk
и захватываем 10 лучших из них с head
.
В качестве демонстрации того, что код безопасен для файлов с разными именами:
for i in $(seq 1 10); do touch $RANDOM.jpg $RANDOM.png $RANDOM.txt; sleep 1.1; done
touch x.jpg '[x].jpg' 'a?b.jpg' 'a*b.jpg' '$( echo boom ).jpg'
touch single\'quote.jpg double\"quote back\\slash.jpg '*.jpg' ②.jpg
... вывод:
declare -a wantedfiles=([0]="②.jpg" [1]="*.jpg" [2]="single'quote.jpg" [3]="back\\slash.jpg" [4]=$'X\240Y.jpg' [5]="[x].jpg" [6]="a?b.jpg" [7]="a*b.jpg" [8]="\$( echo boom ).jpg" [9]="25396.jpg")
(изменить последнее имя файла для того, что $RANDOM
придумал ).
Я получил решение, я упустил некоторые важные детали, при загрузке в Mint небольшое сообщение об ошибке мелькало несколько раз в течение 1 -2 секунд, говоря mce: hardware error cpu 0 machine check 0 bank 0
.
Это может происходить по некоторым причинам:
В моем случае это произошло из-за того, что я установил ОЗУ с разной частотой, я хотел обновить свою ОЗУ и не знал, какая частота ОЗУ была установлена до -. Я поместил новую оперативную память объемом 800 мгц во второй слот, через несколько дней у меня возникла эта проблема.
Другой причиной может быть повреждение старой карты памяти. Поэтому попробуйте заменить одну или несколько планок оперативной памяти.
Я удалил старую планку оперативной памяти и заменил ее другой на 800 мгц, теперь система работает нормально.
Надеюсь, этот ответ помог, потому что в Интернете очень мало информации по этой теме.