переместить файлы, основанные на содержании

В современной ОС на ограниченном количестве ядер процессора может одновременно работать множество программ (сервисов или процессов, если хотите), поэтому должен быть способ определить, какая из них имеет наивысший приоритет по сравнению с другими, этим способом является уровень выполнения процессора, они варьируются от -20 (наивысший приоритет) до 19 (наименьший приоритет)

вы можете сделать программу и увеличить или уменьшить ее уровень выполнения, это будет выражаться в получении большего или меньшего внимания от ядра и эффективно заставляет ее работать быстрее или медленнее

http: //www. allinterview.com/showanswers/14283/what-are-processor-execution-levels-and-priorities.html

http://www.ibm.com/developerworks/library/l-lpic1-v3-103-6/

-1
20.02.2019, 08:11
1 ответ

Итак, первая проблема заключается в обнаружении файлов, которые необходимо переместить.

Это можно сделать с помощью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... ]тест в цикле будет пропускать в каталоге все, что не является обычным файлом (или символической ссылкой на обычный файл ).

0
28.01.2020, 05:12

Теги

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