• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

Scripte

mischlig

Newbie
Hallo Linux Club,

ich möchte mit ein paar scripten mehr sicherheit gewährleisten. Unter anderem möchte ich folgendes script per cronjob ausführen:

Code:
#! /bin/sh
#PHP Filesearcher
#
#Durchsucht das SRV Verzeichnis nach modifizierten php Dateien der
#letzten 5 Tage

find /srv -name '*.php' -type f -mtime -5

Wie erreiche ich, dass mir diese befehlszeile noch das datum angibt. Momentan listet mir dieses script nur den dateipfad und den daeinamen. Allerdings soll mir dieses script auch sagen wann dateien modifiziert wurden.
 
A

Anonymous

Gast
mischlig schrieb:
Wie erreiche ich, dass mir diese befehlszeile noch das datum angibt. Momentan listet mir dieses script nur den dateipfad und den daeinamen. Allerdings soll mir dieses script auch sagen wann dateien modifiziert wurden.
gibt mehrere Möglichkeiten, viele mit nachschalten von Kommandos, aber unter modernen Linux-Systemen sollte das mit find direkt auch gehen etwa so:
Code:
find /srv -name '*.php' -type f  -mtime -5 -printf "%TY:%Tm:%Td  %TX  %p\n"
Obwohl ich in deinem Fall doch ehr für
Code:
find /srv -name '*.php' -type f  -ctime -5 -printf "%CY:%Cm:%Cd  %CX  %p\n"
plädieren würde. Der Unterschied http://www.linupedia.org/opensuse/Zeitstempel_von_Dateien#Change_Time_.28ctime.29
Genaueres und Weiteres steht in der Manpage von find.


robi
 
OP
M

mischlig

Newbie
hm, danke, deine untere befehlszeile habe ich probiert und die funktioniert auch...

thank


mich würde noch interessieren:

wenn ich nach allen dateiendungen suchen möchte sieht die zeile so aus:

Code:
find /srv -type f  -ctime -5 -printf "%CY:%Cm:%Cd  %CX  %p\n"

das ist die gleiche version um das
Code:
-name '*.php'
gekürzt.

wie gestalte ich diese zeile denn wenn ich bestimmte dateiendungen ausklammern möchte?
 
A

Anonymous

Gast
mischlig schrieb:
Code:
-name '*.php'
gekürzt.
wie gestalte ich diese zeile denn wenn ich bestimmte dateiendungen ausklammern möchte?

Das kommt auf die genaue Aufgabe an. Am einfachsten die Negation durch !
ZB
Code:
find -name "*log*"  ! -name "*.bz2"
hier wird eine Negation (das ! vor dem Suchbegriff) verwendet und damit Dateien mit der Endung ".bz2" explizied ausgeklammert.

oder
Code:
find -name "*[^.]log*"
hier wird mit Shellmitteln ein bestimmtes Zeichen an einer bestimmten Stelle ausgeschlossen, hier der Punkt vor "log" Alle Dateien die nicht "log" enthalten und die vor dem "log" einen Punkt haben werden nicht gefunden.


noch spezieller und präziser geht es wahrscheinlich mit Regulären Ausdrücken.
Code:
find -regex ".*\.log.[0-9]*"
hier wird speziell was gesucht was "einen Punkt" hat dahinter "log" steht, dann irgend ein "x-beliebiges Zeichen" kommt und dann dürfen, müssen aber nicht, beliebig viele Ziffern folgen. Das ist aber dann immer sehr speziell und für den Anfänger so auch schlecht zu verstehen.

Ansonsten bietet find auch Operatoren die Suchoptionen mittels not/and/or verknüfen können oder die ganze Ausdrücke klammern oder Gruppieren, näheres wieder mal in der Manpage von find und dort unter OPERATORS und weiter unten in den Beispielen.

robi
 
Oben