Подписание grub для secureboot uefi :Secureboot запрещает загрузку модуля (memdisk )/boot/grub/x86 _64 -efi/normal.mod

  1. Не используйте eval, если у вас нет другой альтернативы. Это потенциально опасно, в зависимости от содержимого переменных $startи $stop. Не стоит привыкать использовать его там, где он не нужен.

  2. Не используйте вывод lsни для чего, кроме просмотра в терминале. Попытка разобрать ls, даже самым простым способом, может привести к неудаче во многих отношениях. Используйте любое , которое может создать список имен файлов, разделенных NUL -, вместо:find -print0часто является хорошим выбором.

  3. bash, встроенный -в расширение последовательности {x..y}, не может оценивать переменные, но отдельная программа seqможет принимать переменные в качестве аргументов. Он также имеет полезную опцию -sдля указания разделителя.

Для следующего требуется версия grep, которая поддерживает параметр -zдля разделенных входных записей NUL -(, например. GNU, FreeBSD и большинство других современных версий grep).

# build a regular expression matching the desired sequence
re="$(seq -s '|' "$start" "$stop")"

# use the RE with `find... -print0` and `grep -E -z -c`
find /home/me/*/ -maxdepth 1 -type f -name 'file_*.txt' -print0 | 
  grep -Ezc "/file_($re)\.txt$"

Например, если start=3и stop=7, то $reбудет 3|4|5|6|7. Затем команда grepрасширится до :

.
grep -Ezc "/file_(3|4|5|6|7)\.txt$"

Кстати, аргументы -name 'file_*.txt'для команды findне требуются.Их можно отбросить, и конвейер все равно будет работать без ошибок. Все, что они делают, это сокращают входные данные, которые необходимо обработать с помощью grep. В лучшем случае очень незначительная оптимизация.

напр.

find /home/me/*/ -maxdepth 1 -type f -print0 | grep -Ezc "/file_($re)\.txt$"
1
01.12.2020, 09:37
0 ответов

Теги

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