В современной ОС на ограниченном количестве ядер процессора может одновременно работать множество программ (сервисов или процессов, если хотите), поэтому должен быть способ определить, какая из них имеет наивысший приоритет по сравнению с другими, этим способом является уровень выполнения процессора, они варьируются от -20 (наивысший приоритет) до 19 (наименьший приоритет)
вы можете сделать программу и увеличить или уменьшить ее уровень выполнения, это будет выражаться в получении большего или меньшего внимания от ядра и эффективно заставляет ее работать быстрее или медленнее
Итак, первая проблема заключается в обнаружении файлов, которые необходимо переместить.
Это можно сделать с помощьюgrep
:
grep -q -E '^>.*_(1?[0-9]|2[0-4])$'
grep -q -E '^>.*_(2[5-9]|[3-9][0-9]|[0-9]{3,})$'
Эти команды возвращали бы значение true, если бы входные данные содержали строку, совпадающую с указанными расширенными регулярными выражениями.
Выражение _(1?[0-9]|2[0-4])$
будет соответствовать любому положительному целому числу меньше 25, стоящему в конце строки после символа подчеркивания, а _(2[5-9]|[3-9][0-9]|[0-9]{3,})$
соответствует любому положительному целому числу больше или равному 25 в конце строки после символа подчеркивания. (при условии, что не существует нулевых -заполненных целых чисел, таких как002
). Мы также сопоставляем >
в начале строки. Опция -q
остановит grep
от фактического вывода всего, что (нас интересует только то, сможем ли мы найти одну из этих строк или нет ).
Для копирования файла первый grep
должен возвращать false , а второй grep
должен возвращать true .
Применение этого к каждому файлу каталога (в этом случае независимо от того, как файлы называются, поскольку вы ничего не сказали об этом):
for filename in./*; do
[ ! -f "$filename" ] && continue
if ! grep -q -E '^>.*_(1?[0-9]|2[0-4])$' "$filename" &&
grep -q -E '^>.*_(2[5-9]|[3-9][0-9]|[0-9]{3,})$' "$filename"
then
mv -i "$filename" /some/destination
fi
done
Это приведет к перемещению файлов, соответствующих требованиям, в некоторый каталог назначения по адресу /some/destination
.Параметр -i
для mv
заставит утилиту запрашивать подтверждение перед перезаписью уже существующего файла с тем же именем, что и перемещаемый файл.
Первый [ ! -f... ]
тест в цикле будет пропускать в каталоге все, что не является обычным файлом (или символической ссылкой на обычный файл ).