Neue Dateien aus Verzeichnissen GZippen

Es kommt doch immer wieder vor, dass ich die aktuellsten Dateien unterhalb des files-Verzeichnisse von einer Live-Umgebung auf das Staging- oder das Dev-System kopieren möchte. Natürlich könnte man einfach das ganze files-Verzeichnis herunterladen, aber das sind bei gewissen Kundeninstallationen mehrere Gigabyte an Daten, welche ich mir nicht auf meine lokale Platte kopieren möchte. Um in einem Verzeichnis Dateien zu suchen, welche älter als eine Anzahlt Tage sind, kann der Befehl 'find' verwendet werden:

find . -type f -mtime -5

Dieser listet ab dem aktuellen Verzeichnisse alle Files (-type f) auf, welche älter als 5 Tage sind (-mtime -5).

Nun kann man mit der Pipe noch die notwendigen Befehle zum Gzippen der Dateien anhängen:

find . -type f -mtime -5 -print | xargs tar cf - | gzip -c > /var/tmp/files_newer_than_5_days.tgz

Der Zielpfad der tgz-Datei sollte nicht im selben Verzeichnis in dem der Befehlt ausgeführt wird liegen.

Bei Drupal gibt es im files-Verzeinis natürlich auch einige Unterverzeichnisse, die man nicht unbedingt kopieren möchte (z.B. imagecache, js, css, ...). Diese kann man zusätzlich ausschliessen:

find . -path './imagecache' -prune -o -path './js' -prune -o -path './css' -prune -o -type f -mtime -5 -print | xargs tar cf - | gzip -c > /var/tmp/files_newer_than_5_days.tgz

Für jedes nicht gewünschte Verzeichnis einfach folgender Part wiederholen:

-path './VERZEICHNIS' -prune -o

Die Jungs von undpaul haben mich auf ein anderes Modul aufmerksam gemacht, welches die Problematik elegant löst: Stage File Proxy. Den Blogbeitrag findet ihr hier.