Объединение find exec и цикла while

El problema parece ser que de alguna manera instaló (o al menos convenció a dpkg de que está disponible )una versión más nueva del paquete locales. El disponible en Stretch solo depende de libc-bin (>> 2.24), mientras que su salida muestra que su aptve una versión que depende de libc-bin (> 2.27)(, podría decir que es inconsistente que dpkguse >>en dependencias y aptproduzca >en casos como este, así es, significan lo mismo ).

El paquete localesno es esencial, por lo que intentaría eliminarlo y luego volver a instalarlo, si tiene muchas configuraciones regionales compiladas, eso podría llevar un tiempo.

0
20.06.2019, 16:07
2 ответа
find /my/directory/here/ -type f -name '*.log' -mmin -480 -mmin +60 \
    -exec grep -qi warning: {} \; \
    -exec grep -qi error: {} \; \
    -exec stat -c '%n|%y|%x|%s|%U|%u' {} +

То есть вам не нужен фактический вывод двух команд grep, только статус выхода, поэтому мы используем -qвместо -l. Цикл whileне нужен. statможет вызываться с несколькими файлами, поэтому мы используем -exec stat... {} +. Я также процитировал шаблон *.log, чтобы предотвратить его расширение до любого такого имени в текущем каталоге.

Связанные:

Другой способ сделать то же самое:

find /my/directory/here/ -type f -name '*.log' -mmin -480 -mmin +60 \
    -exec sh -c '
        for pathname do
            if grep -qi warning: "$pathname" &&
               grep -qi error: "$pathname"
            then
                stat -c "%n|%y|%x|%s|%U|%u" "$pathname"
            fi
        done' sh {} +

Здесь используется findв качестве генератора пути для цикла for, работающего в дочерней оболочке. Однако это вызовет statодин раз для каждого файла, содержащего совпадения для обоих шаблонов, поэтому это немного менее эффективно.

1
28.01.2020, 02:40

GNU grep (1 )может выполнять рекурсивное сопоставление с образцом:

grep -R warning that-dir

проверяет все файлы в that-dir.

0
28.01.2020, 02:40

Теги

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