Ich hatte öfters das Problem, dass ich mal eben Gameserver sichern musste, die mit Symlinks aufgebaut sind. Wenn man für die Symlinks z.B. absolute Pfade verwendet, ist das Löschen der verwaisten Symlinks ein Mehraufwand. Um das direkt auszuschließen, kann man mit dem Find-Befehl und Xargs arbeiten.
Wenn ich z.B. den Server in '/server/publicserver/cssfun' habe, dann wechsel ich einfach mit cd nach '/server/publicserver'.
Mit diesem Befehl kann man den Server dann sichern:
|
Quellcode
|
1
|
find cssfun/ -type f -a ! -name *.dat -a ! -name *.log -a ! -name *.ztmp -a ! -name modelsounds.cache -a ! -name steam_appid.txt -a ! -empty -a ! -path '*/DownloadLists/*' -print0 | xargs -0 tar -czf cssfun.tar.gz
|
Erklärung:
|
Quellcode
|
1
2
3
4
5
6
7
8
9
10
11
12
13
|
find cssfun/ -> sucht dann alle Dateien nur in 'cssfun/'.
-type f -> sucht nur nach Dateien
-a ! -name *.dat -> und nicht, d.h. diese Bedingung darf nicht erfüllt sein (schließt alle Dateien mit .dat am Ende aus)
-a ! -name *.log -> schließt alle Logdateien aus
-a ! -name *.ztmp -> schließt alle Dateien mit .ztmp aus
-a ! -name modelsounds.cache -> schließt die Datei modelsounds.cache aus
-a ! -name steam_appid.txt -> schließt die Datei steam_appid.txt aus
-a ! -empty -> schließt leere Dateien aus
-a ! -path '*/DownloadLists/*' -> schließt alle Verzeichnisse aus, die DownloadLists heißen
-print0 -> trennt die Dateinamen mit einem 0-Byte (so kann dann auch mit Leerzeichen in Dateinamen umgegangen werden)
| xargs -0 -> Das Pipe-Zeichen bewirkt, dass die Ausgabe von find an den Befehl xargs weitergeleitet wird. '-0' sagt xargs, dass die Argumente mit einem 0-Byte getrennt sind
tar -czf cssfun.tar.gz -> erstellt ein gzip komprimiertes Tar-Archiv. Am Ende packt xargs die Ausgabe von find mit an. Das bewirkt, dass nur die Dateien gepackt werden, die von find auch gefunden werden.
|
Wenn die Maps, Materials, Sounds und Models auch noch Symlinks sind, kann man mal eben einen Gameserver in 10 Sekunden sichern. Die Symlinks kann man hinterher ganz normal mit dem Befehl "cp -sR" erstellen.