"# Archivdatei erzeugen in JupyterLab-Umgebungen\n",
"\n",
"In browserbasierten JupyterLab-Umgebungen, wie sie mit dem JupyterHub der HU Berlin zum Einsatz kommen, können in der Weboberfläche nur einzelne Dateien heruntergeladen werden, aber (noch) keine Ordner z.B. als zip-Archivdatei. Ihr gesamtes Python-Projekt direkt auf Ihren lokalen Rechner zu holen, ist derzeit also nicht möglich. Um eine Archivdatei zu erzeugen, kann aber ein kleiner Hack in Ihrer laufenden JupyterLab-Umgebung angewandt werden. Diese läuft auf einem Linux-System, welches standardmäßig das Unix-Packprogramm *tar* installiert hat. Da JupyterLab sogenannte System-Shells (Kommandozeilen) unterstützt, können Sie damit das *tar*-Programm ausführen z.B. im Terminal, den Sie im JupyterLab standardmäßig auch zur Verfügung haben. Sie können diese sogenannten Shell-Befehle aber auch wie folgt direkt im Notebook ausführen:"
"Auf Linux-Rechnern interagieren Sie mit kommandozeilenbasierten Shells mit Ihrem Betriebssystem, wenn Sie keine grafische Benutzeroberfläche (GUI) haben (oder nutzen wollen). Das bedeutet folglich, dass wir in der Code-Zelle oben keinen Python-Code mehr ausführen.\n",
"\n",
"**Wichtig ist, wenn Sie den Befehl direkt in einem Notebook eingeben, dass Sie das Ausreifezeichen-Präfix `!` setzen.** Erst dann wird ein kommandozeilenbasiertes Shell-Command ausgeführt, hier zum Zwecke der Erzeugung einer Archivdatei. Der allgmeine Aufruf lautet:\n",
"\n",
"`tar OPTIONEN Datei(en)`\n",
"\n",
"- `tar` Nach dem Ausrufezeichen folgt das Schlüsselwort zum Aufruf des Programms, dem wir mehrere Parameter übergeben:\n",
"\n",
"- `--exclude='.ipynb_checkpoints'` (optional) Da wir die Checkpoint-Files in der Archivdatei nicht benötigen, können wir diese mit dem `exclude`-Parameter ausschließen.\n",
"\n",
"- `-cvf` Damit erhält das Programm detaillierte Angaben zur Ausführung.\n",
" - `-c` Ein neues Archiv erzeugen.\n",
" - `-v` Ausführliche Ausgabe aktivieren. Hierbei ist zu beachten, dass man dies möglichst an den Anfang des Befehls anhängt, wenn mehrere Optionen kombiniert werden. Z.B. würde `-cfv` zu einer Fehlermeldung führen. Korrekt wäre `-vcf`.\n",
" - `-f` Archiv in angegebene Datei schreiben / Daten aus angegebener Datei lesen. Diese Option muss die letzte sein, da die nachfolgende Zeichen als Datei interpretiert werden. Z.B. würde `-cfv` zu einer Fehlermeldung führen. Korrekt wäre -vcf.\n",
"\n",
"- `./project/MyProject.tar` Relativer Pfad, wo die Archivdatei gespeichert werden soll (hier im Ordner \"project\") sowie der Name der zu erzeugenden Archivdatei - ist frei wählbar, muss aber immer mit der Dateiendung `.tar` enden (hier \"MyProject\").\n",
"\n",
"- `./11-Dateien-verarbeiten` Der Ordner, der komprimiert werden soll. Die Angabe erfolgt relativ zur absoluten Position im Dateisystem, an der der `tar`-Befehl ausgeführt wird (hier `/home/jovyan`). Wichtig: Der Pfad muss korrekt sein und der Ordner muss auch an dieser Position existieren, andernfalls wird ein Fehler geworfen.\n",
"\n",
"Weitere Informationen zum *tar*-Programm können Sie im [Ubuntu-Wiki](https://wiki.ubuntuusers.de/tar/) nachlesen.\n",
"\n",
"**Tipp:** Zur Orientierung können Sie sich mit dem Befehl `pwd` (bzw. `!pwd`) jederzeit Ihre aktuelle Position im Dateisystem als absoluten Pfad ausgeben lassen.\n",
"Sie können Archivdateien wie andere Dateien auch von Ihrem lokalen Rechner ins JupyterLab hochladen. Um auf die Inhalte zuzugreifen, müssen Sie die Archivdatei im JupyterLab entpacken. Auch dies erfolgt mit dem *tar*-Programm. Dazu verwenden Sie folgenden Befehl:"
"Wenn Sie den Befehl im Terminal ausführen möchten, dann lassen Sie Ausrufezeichen-Präfix weg (`tar -xvf ./datei.tar`).\n",
"\n",
"Mit dem Parameter `-C ./project` kann spezifiert werden, wo der entpackte Ordner gespeichert werden soll (hier im Ordner \"project\", default ist die aktuelle Position im Dateisystem). Pfadangabe ist wieder relativ zur absoluten Position im Dateisystem, von wo das *tar*-Programm ausgeführt wird (hier `/home/jovyan`)."
In browserbasierten JupyterLab-Umgebungen, wie sie mit dem JupyterHub der HU Berlin zum Einsatz kommen, können in der Weboberfläche nur einzelne Dateien heruntergeladen werden, aber (noch) keine Ordner z.B. als zip-Archivdatei. Ihr gesamtes Python-Projekt direkt auf Ihren lokalen Rechner zu holen, ist derzeit also nicht möglich. Um eine Archivdatei zu erzeugen, kann aber ein kleiner Hack in Ihrer laufenden JupyterLab-Umgebung angewandt werden. Diese läuft auf einem Linux-System, welches standardmäßig das Unix-Packprogramm *tar* installiert hat. Da JupyterLab sogenannte System-Shells (Kommandozeilen) unterstützt, können Sie damit das *tar*-Programm ausführen z.B. im Terminal, den Sie im JupyterLab standardmäßig auch zur Verfügung haben. Sie können diese sogenannten Shell-Befehle aber auch wie folgt direkt im Notebook ausführen:
Auf Linux-Rechnern interagieren Sie mit kommandozeilenbasierten Shells mit Ihrem Betriebssystem, wenn Sie keine grafische Benutzeroberfläche (GUI) haben (oder nutzen wollen). Das bedeutet folglich, dass wir in der Code-Zelle oben keinen Python-Code mehr ausführen.
**Wichtig ist, wenn Sie den Befehl direkt in einem Notebook eingeben, dass Sie das Ausreifezeichen-Präfix `!` setzen.** Erst dann wird ein kommandozeilenbasiertes Shell-Command ausgeführt, hier zum Zwecke der Erzeugung einer Archivdatei. Der allgmeine Aufruf lautet:
`tar OPTIONEN Datei(en)`
-`tar` Nach dem Ausrufezeichen folgt das Schlüsselwort zum Aufruf des Programms, dem wir mehrere Parameter übergeben:
-`--exclude='.ipynb_checkpoints'` (optional) Da wir die Checkpoint-Files in der Archivdatei nicht benötigen, können wir diese mit dem `exclude`-Parameter ausschließen.
-`-cvf` Damit erhält das Programm detaillierte Angaben zur Ausführung.
-`-c` Ein neues Archiv erzeugen.
-`-v` Ausführliche Ausgabe aktivieren. Hierbei ist zu beachten, dass man dies möglichst an den Anfang des Befehls anhängt, wenn mehrere Optionen kombiniert werden. Z.B. würde `-cfv` zu einer Fehlermeldung führen. Korrekt wäre `-vcf`.
-`-f` Archiv in angegebene Datei schreiben / Daten aus angegebener Datei lesen. Diese Option muss die letzte sein, da die nachfolgende Zeichen als Datei interpretiert werden. Z.B. würde `-cfv` zu einer Fehlermeldung führen. Korrekt wäre -vcf.
-`./project/MyProject.tar` Relativer Pfad, wo die Archivdatei gespeichert werden soll (hier im Ordner "project") sowie der Name der zu erzeugenden Archivdatei - ist frei wählbar, muss aber immer mit der Dateiendung `.tar` enden (hier "MyProject").
-`./11-Dateien-verarbeiten` Der Ordner, der komprimiert werden soll. Die Angabe erfolgt relativ zur absoluten Position im Dateisystem, an der der `tar`-Befehl ausgeführt wird (hier `/home/jovyan`). Wichtig: Der Pfad muss korrekt sein und der Ordner muss auch an dieser Position existieren, andernfalls wird ein Fehler geworfen.
Weitere Informationen zum *tar*-Programm können Sie im [Ubuntu-Wiki](https://wiki.ubuntuusers.de/tar/) nachlesen.
**Tipp:** Zur Orientierung können Sie sich mit dem Befehl `pwd` (bzw. `!pwd`) jederzeit Ihre aktuelle Position im Dateisystem als absoluten Pfad ausgeben lassen.
%% Cell type:code id:A-vngQ4A0yhK tags:
``` python
!pwd
```
%% Output
/home/jovyan
%% Cell type:markdown id:bca055ba tags:
## Archivdatei entpacken
%% Cell type:markdown id:R9kxGJsmydHh tags:
Sie können Archivdateien wie andere Dateien auch von Ihrem lokalen Rechner ins JupyterLab hochladen. Um auf die Inhalte zuzugreifen, müssen Sie die Archivdatei im JupyterLab entpacken. Auch dies erfolgt mit dem *tar*-Programm. Dazu verwenden Sie folgenden Befehl:
Wenn Sie den Befehl im Terminal ausführen möchten, dann lassen Sie Ausrufezeichen-Präfix weg (`tar -xvf ./datei.tar`).
Mit dem Parameter `-C ./project` kann spezifiert werden, wo der entpackte Ordner gespeichert werden soll (hier im Ordner "project", default ist die aktuelle Position im Dateisystem). Pfadangabe ist wieder relativ zur absoluten Position im Dateisystem, von wo das *tar*-Programm ausgeführt wird (hier `/home/jovyan`).