Оболочка bash
(и ряд других оболочек )имеют нестандартный -оператор проверки -nt
. Этот оператор проверяет, является ли время модификации одного файла более новым, чем время модификации другого.
В bash
,оператор -nt
имеет временное разрешение в одну секунду. В ksh93
можно использовать тот же оператор с разрешением менее -секунды. Приведенный ниже код совместим с ksh93
, за исключением того, что shopt -s globstar
необходимо изменить на set -o globstar
, где используется этот параметр.
Использование оператора проверки -nt
для файлов, соответствующих *.txt
в текущем каталоге, для поиска самого нового обычного файла:
unset newest
for filename in./*.txt; do
if [ -f "$filename" ] && [ "$filename" -nt "$newest" ]; then
newest=$filename
fi
done
или, немного короче,
unset newest
for filename in./*.txt; do
[ -f "$filename" ] && [ "$filename" -nt "$newest" ] && newest=$filename
done
В конце цикла значение "$newest"
будет именем последнего модифицированного обычного файла в текущем каталоге, который имеет суффикс имени файла .txt
, при условии, что такие файлы вообще существовали (иначе переменная newest
была бы не установлена ).
Оболочке dash
, если она используется, потребуется отдельная проверка существования файла $newest
, так как ее оператор -nt
имеет несколько иную семантику, чем bash
и ksh93
:
unset newest
for filename in./*.txt; do
if [ -f "$filename" ]; then
if [ ! -f "$newest" ] || [ "$filename" -nt "$newest" ]; then
newest=$filename
fi
fi
done
Чтобы сделать это рекурсивно с помощью bash
, установите параметр оболочки globstar
и используйте **
для подстановки имен файлов:
shopt -s globstar
unset newest
for pathname in./**/*.txt; do
if [ -f "$pathname" ] && [ "$pathname" -nt "$newest" ]; then
newest=$pathname
fi
done
Шаблон **
соответствует точно так же, как *
, но допускает сопоставление через /
в путях.
Оболочка dash
не поддерживает это.
Основываясь на предыдущем коде, чтобы получить пять последних измененных файлов:
shopt -s globstar
unset newest
for pathname in./**/*.txt; do
if [ -f "$pathname" ]; then
for (( i=0; i < 5; ++i )); do
if [ "$pathname" -nt "${newest[$i]}" ]; then
newest=( "${newest[@]:0:i}" "$pathname" "${newest[@]:i:4}" )
break
fi
done
fi
done
Единственная дополнительная вещь здесь состоит в том, что newest
теперь является массивом bash
, и что мы, для каждого пути, который мы рассматриваем, должны просмотреть пять последних найденных «самых новых файлов», чтобы увидеть, где в массив, в который может поместиться этот новый файл.
Когда мы обнаружили, что файл действительно новее, чем один из других файлов в массиве, мы вставляем новый путь в массив и в то же время ограничиваем количество элементов в нем до пяти.
После завершения цикла массив newest
будет содержать пути пяти последних измененных обычных файлов, имеющих суффикс .txt
имен файлов.Массив будет отсортирован по времени модификации с последним измененным файлом как ${newest[0]}
.
Похоже, что Windows перезаписала что-то в вашем разделе EFI, или просто NVRAM (параметры загрузки и порядок загрузки)-могут быть как-то связаны с недавней уязвимостью безопасной загрузки .
Первое, что нужно сделать, это перейти к экрану ручного выбора загрузки UEFI/BIOS для вашего ноутбука/рабочего стола. Обычно это одна из функциональных клавиш (F12, F11, F2 распространены, но между производителями нет единого стандарта ). Проверьте руководство или онлайн-документацию для вашего оборудования.
sudo update-grub
, чтобы обновить файл grub. В зависимости от того, что привело вас к этому состоянию, этого может быть достаточно, но если нет, вам может потребоваться запустить что-то вроде grub-install...
, чтобы убедиться, что ваш EFI правильно настроен для двойной загрузки -и ваш порядок загрузки указывает на Grub сначала. Если вышеперечисленное не помогло вам разобраться, вам следует следовать документации Ubuntu по этому вопросу, поскольку Mint основан на Ubuntu, в этом случае процесс исправления вашего grub такой же.
Если ничего не помогло, зайдите на специальные форумы Mint или Ubuntu и попросите там спасательный круг.