Ich habe versucht, die Syntax für diesen Befehl herauszufinden:
grep ! error_log | find /home/foo/public_html/ -mmin -60
oder
grep '[^error_log]' | find /home/baumerf/public_html/ -mmin -60
Ich muss alle Dateien sehen, die geändert wurden, außer denen mit dem Namen error_log
.
[Ich habe hier darüber gelesen (http://www.robelle.com/smugbook/regexpr.html), aber nur ein "not"-Regex-Muster gefunden.
grep -v
ist Ihr Freund:
grep --help | grep invert
-v, --invert-match wählt nicht übereinstimmende Zeilen aus
Sehen Sie sich auch das verwandte -L
(das Komplement von -l
) an.
-L, --files-without-match gibt nur DATEINamen aus, die keine Übereinstimmung enthalten
Sie können für diese Zwecke auch awk
verwenden, da es Ihnen erlaubt, komplexere Prüfungen auf übersichtlichere Weise durchzuführen:
Zeilen, die nicht foo
enthalten:
awk '!/foo/'
Zeilen, die weder "foo" noch "bar" enthalten:
awk '!/foo/ && !/bar/'
Zeilen, die weder foo
noch bar
enthalten und die entweder foo2
oder bar2
enthalten:
awk '!/foo/ && !/bar/ && (/foo2/ || /bar2/)'
Und so weiter.
In Ihrem Fall wollen Sie vermutlich nicht grep verwenden, sondern stattdessen eine negative Klausel an den find-Befehl anhängen, z. B.
find /home/baumerf/public_html/ -mmin -60 -not -name error_log
Wenn Sie Platzhalter in den Namen einfügen wollen, müssen Sie diese ausschließen, z. B. um Dateien mit der Endung .log auszuschließen:
find /home/baumerf/public_html/ -mmin -60 -not -name \*.log