Я пытался разобраться с синтаксисом этой команды:
grep ! error_log | find /home/foo/public_html/ -mmin -60
или
grep '[^error_log]' | find /home/baumerf/public_html/ -mmin -60
Мне нужно видеть все измененные файлы, кроме файлов с именем error_log
.
Я'читал об этом здесь, но нашел только один шаблон not
-regex.
grep -v
- ваш друг:
grep --help | grep invert
-v, --invert-match выбирают не совпадающие строки
Ознакомьтесь также с родственными -L
(дополнение к -l
).
-L, --files-without-match выводить только имена ФАЙЛОВ, не содержащих совпадений
Для этих целей можно также использовать awk
, поскольку он позволяет выполнять более сложные проверки в более наглядной форме:
Строки, не содержащие foo
:
awk '!/foo/'
Строки, не содержащие ни foo
, ни bar
:
awk '!/foo/ && !/bar/'
Строки, не содержащие ни foo
, ни bar
, которые содержат либо foo2
, либо bar2
:
awk '!/foo/ && !/bar/ && (/foo2/ || /bar2/)'
И так далее.
В вашем случае вы, вероятно, не хотите использовать grep, а добавляете отрицательное предложение к команде find, например
find /home/baumerf/public_html/ -mmin -60 -not -name error_log
Если вы хотите включить в имя подстановочные знаки, то вам придется их экранировать, например, чтобы исключить файлы с суффиксом .log:
find /home/baumerf/public_html/ -mmin -60 -not -name \*.log