Snažil som sa zistiť syntax tohto príkazu:
grep ! error_log | find /home/foo/public_html/ -mmin -60
alebo
grep '[^error_log]' | find /home/baumerf/public_html/ -mmin -60
Potrebujem vidieť všetky súbory, ktoré boli modifikované, okrem tých s názvom error_log
.
Čítal som o tom tu, ale našiel som len jeden vzor not
-regex.
grep -v
je váš priateľ:
grep --help | grep invert
-v, --invert-match vyberie nezhodujúce sa riadky
Pozrite si aj súvisiace -L
(doplnok -l
).
-L, --files-without-match vypíše iba názvy súborov, ktoré neobsahujú žiadnu zhodu
Na tieto účely môžete použiť aj awk
, pretože umožňuje vykonávať zložitejšie kontroly prehľadnejším spôsobom:
Riadky, ktoré neobsahujú foo
:
awk '!/foo/'
Riadky neobsahujúce ani foo
, ani bar
:
awk '!/foo/ && !/bar/'
Riadky neobsahujúce ani foo
ani bar
, ktoré obsahujú buď foo2
alebo bar2
:
awk '!/foo/ && !/bar/ && (/foo2/ || /bar2/)'
A tak ďalej.
Vo vašom prípade pravdepodobne nechcete použiť grep, ale namiesto toho pridať do príkazu find zápornú klauzulu, napr.
find /home/baumerf/public_html/ -mmin -60 -not -name error_log
Ak chcete do názvu zahrnúť zástupné znaky, budete ich musieť escapeovať, napr. na vylúčenie súborov s príponou .log:
find /home/baumerf/public_html/ -mmin -60 -not -name \*.log