Page 1 of 1

.log Dateien in Unterordnern leeren

Posted: 2010-08-18 00:17
by Luk
Hallo Leute!

Ich habe eine kurze und knappe Frage:

Wie lautet der Befehl um alle Logdateien rekursiv in Unterordnern zu leeren?

Habe folgendes probiert:

Code: Select all

find ./ -name .log -type d -exec cat /dev/null > {} \;
Da ich mich mit den Befehlen nicht ganz auskenne, weiß ich auch nicht woran es hakt :ymblushing:

Würde mich sehr über eine Antwort freuen.

Re: .log Dateien in Unterordnern leeren

Posted: 2010-08-18 00:41
by Joe User
Ungetestet:

Code: Select all

find /path -type f -name \*.log -print0 | xargs -0 : >

Re: .log Dateien in Unterordnern leeren

Posted: 2010-08-18 01:00
by Luk
Hallo!

Danke für den Vorschlag :)

Funktioniert leider noch nicht ganz^^

Code: Select all

gamecreate@78:~$ find /gameserver/gamecreate -type f -name \*.log -print0 | xargs -0 : >
-sh: syntax error near unexpected token `newline'

Re: .log Dateien in Unterordnern leeren

Posted: 2010-08-18 10:55
by Joe User
Tested

Code: Select all

bash -c 'for file in `find ./test -type f -name \*.log -print0 | xargs -0 ls` ; do : > $file ; done'

Re: .log Dateien in Unterordnern leeren

Posted: 2010-08-18 11:24
by Roger Wilco
Falls auf deinem System logrotate installiert ist, wuerde ich einfach das fuer das Rotieren und Leeren der Logdateien benutzen.

Re: .log Dateien in Unterordnern leeren

Posted: 2010-08-18 14:50
by Luk
Danke für das Script Joe User!

@ Roger Wilco: Werde ich mir demnächst anschauen. Danke für die schnelle Hilfe :)

Re: .log Dateien in Unterordnern leeren

Posted: 2010-08-18 15:10
by Joe User
Dein -exec fällt aber bei Leerzeichen auf die Schnauze ;)

Re: .log Dateien in Unterordnern leeren

Posted: 2010-08-18 15:31
by Roger Wilco
matzewe01 wrote:?!? Stimmt. Aber warum...
Weil {} von `find` durch den literalen Dateinamen ohne Escaping und ohne umfassende Single oder Double Quotes ersetzt wird.

Re: .log Dateien in Unterordnern leeren

Posted: 2010-08-18 15:49
by Joe User
Lass das -exec mal komplett weg, dann wirds deutlicher.

Re: .log Dateien in Unterordnern leeren

Posted: 2010-09-07 19:13
by Luk
Hallöchen, ich nochmal :)

Anscheinend funktioniert der Befehl noch nicht 100%ig. Einige Logdateien leert er, andere nicht.

Er geht ja in alle Unterordner rein und sucht nach *.log Dateien. Leider leert er beispielsweise nicht:

Code: Select all

ls -l
-rw-r--r-- 1 gamecreate gamecreate 122519552 2010-09-07 19:02 console_mp.log
Weiß jemand eine Lösung?

Re: .log Dateien in Unterordnern leeren

Posted: 2010-09-07 20:12
by Joe User
Welches Script verwendest Du denn nun? Welcher User führt das Script aus?

Re: .log Dateien in Unterordnern leeren

Posted: 2010-09-08 12:07
by Luk
Ich verwende dieses Script:
Joe User wrote:Tested

Code: Select all

bash -c 'for file in `find ./test -type f -name \*.log -print0 | xargs -0 ls` ; do : > $file ; done'
Der ausführende Benutzer ist "gamecreate".

Komischerweise funktionierts mit root....... Hatte ich noch nicht getestet als ich den Beitrag schrieb. Eigentlich müsste es auch mit gamecreate gehen, oder nicht? Schließlich gehört gamecreate alles in den Ordnern.

Re: .log Dateien in Unterordnern leeren

Posted: 2010-09-08 12:21
by Joe User
Kannst Du bitte Dein komplettes Script und ein ungekürztes "ls -alh" aus dem Verzeichnis einer ungeleerten Datei posten, danke. Führst Du das Script manuell oder per Cron aus (genauer Aufruf bitte)?

Re: .log Dateien in Unterordnern leeren

Posted: 2010-09-08 16:02
by Luk
Der Befehl, den ich von Zeit zu Zeit mal manuell eingebe:

Code: Select all

gamecreate@78:~$ bash -c 'for file in `find ./* -type f -name \*.log -print0 | xargs -0 ls` ; do : > $file ; done'
Ich hab den Befehl in diesem Ordner eingegeben:

Code: Select all

/gameserver/gamecreate
Nach Eingabe des Befehls sieht so beispielsweise einer der Ordner aus, in denen solche Logdateien enthalten sind:

Code: Select all

gamecreate@78:/gameserver/gamecreate/GameCreate-9666/callofduty4/mods/reignoftheundead$ ls -alh
total 21M
drwxr-xr-x 2 gamecreate gamecreate 4.0K 2010-09-07 19:12 .
drwxr-xr-x 4 gamecreate gamecreate 4.0K 2010-05-03 00:25 ..
-rw-r--r-- 1 gamecreate gamecreate  393 2010-09-07 19:05 ban.txt
-rw-r--r-- 1 gamecreate gamecreate  42M 2010-09-08 15:58 console_mp.log
-rw-r--r-- 1 gamecreate gamecreate    0 2010-09-08 15:58 games_mp.log
-rw-r--r-- 1 gamecreate gamecreate   90 2010-05-06 21:40 herb.cfg
-rw-r--r-- 1 gamecreate gamecreate 8.5M 2010-05-21 13:37 mod.ff
-rw-r--r-- 1 gamecreate gamecreate 6.6K 2010-08-03 18:24 rotu.cfg
-rw-r--r-- 1 gamecreate gamecreate  12K 2010-08-15 22:39 rotu_svr_hotfix.iwd
-rw-r--r-- 1 gamecreate gamecreate 477K 2010-05-03 00:18 skins.iwd
-rw-r--r-- 1 gamecreate gamecreate  156 2010-07-25 19:51 startup.cfg
-rw-r--r-- 1 gamecreate gamecreate  11M 2010-05-03 00:18 zombiesurvival.iwd
-rw-r--r-- 1 gamecreate gamecreate 1.2M 2010-06-01 18:08 zz_luks_edit_2.iwd
-rw-r--r-- 1 gamecreate gamecreate 109K 2010-06-07 07:06 zz_luks_edit_2_update.iwd

Re: .log Dateien in Unterordnern leeren

Posted: 2010-09-08 16:20
by Joe User
Wenn Du ohnehin die BASH als Shell verwendest, kannst Du einfach Folgendes direkt in dem Verzeichnis verwenden:

Code: Select all

for file in `find . -type f -name \*.log -print0 | xargs -0 ls` ; do : > ${file} ; done

Re: .log Dateien in Unterordnern leeren

Posted: 2010-09-08 16:25
by Joe User
Wenn Du ausschliessen kannst, dass die Verzeichnisse und Dateien keine Leer/Sonderzeichen enthalten, dann reicht so gar:

Code: Select all

for file in `find . -type f -name \*.log` ; do : > ${file} ; done

Re: .log Dateien in Unterordnern leeren

Posted: 2010-09-08 18:41
by Luk
Also ich hab nun alle Befehle durchprobiert, bei keinem scheint die "console_mp.log" geleert zu werden.

Habe sicherheitshalber mal

Code: Select all

chown -R gamecreate.gamecreate /gameserver/
gemacht, um noch einmal die Dateirechte zu checken...

Die games_mp.log wird allerdings geleert........ Ich verstehe nicht, warum das nicht geht. Kann es sein, dass es nicht geht, da ein Programm (in dem Fall ein Gameserver) auf die Datei zugreift? :((

Re: .log Dateien in Unterordnern leeren

Posted: 2010-09-08 20:02
by Joe User
Luk wrote:Kann es sein, dass es nicht geht, da ein Programm (in dem Fall ein Gameserver) auf die Datei zugreift? :((
Ja, das kann sein, daher solltest Du den Gameserver kurz stoppen oder nach dem Leeren des Log "reloaden".

Re: .log Dateien in Unterordnern leeren

Posted: 2010-09-08 21:04
by Luk
Okay, dann werde ich das beim wöchentlichen Backup machen :)

Danke für die schnelle Hilfe :)

Re: .log Dateien in Unterordnern leeren

Posted: 2010-09-09 17:17
by Luk
matzewe01 wrote:Blöde Frage zwischendurch, warum eigentlich nicht gleich logrotate?
Weil ich keine Ahnung hab, wie das funktioniert :-|

Ich werd' mich mal einlesen.....