Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
| — | anwenderwiki:scripting:shell-find [2012/12/23 23:20] (aktuell) – angelegt - Externe Bearbeitung 127.0.0.1 | ||
|---|---|---|---|
| Zeile 1: | Zeile 1: | ||
| + | {{tag> | ||
| + | ====== Dateimanipulation mit '' | ||
| + | |||
| + | Gelegentlich möchte man die Eigenschaften vieler Dateien auf einmal ändern: Beispielsweise wenn man die Zugriffrechte aller " | ||
| + | Der Linux Befehl //find// kann außer Dateien zu finden, diese auch gleich manipulieren. | ||
| + | |||
| + | ==== find und -exec ==== | ||
| + | |||
| + | Am besten an obigem Beispiel: Ich möchte gerne, dass alle " | ||
| + | | ||
| + | drwxr-xr-x | ||
| + | |||
| + | Das könnte der folgende Befehl leisten: | ||
| + | |||
| + | find /home -type d -name public_html -exec chmod 755 {} \; | ||
| + | |||
| + | Findet alle Verzeichnisse (-type d) mit dem Namen public_html (-name public_html) und führt (-exec) auf die gefundenen Dateien (repräsentiert durch {}) den Befehl " | ||
| + | |||
| + | === Modifikationen === | ||
| + | |||
| + | |||
| + | Um zu sehen, welche Dateien der Befehl verändern würde und um ein Gefühl für die Sache zu bekommen bietet sich: | ||
| + | |||
| + | find /home -type d -name public_html -exec echo {} \; | ||
| + | |||
| + | an. | ||
| + | |||
| + | Wenn die User schon Dateien im ihren public_htmls drinhaben, deren Zugriffsrechte auch geändert werden sollen, kann man die Zugfiffrechte auch rekursiv ändern | ||
| + | |||
| + | find /home -type d -name public_html -exec chmod -R 755 {} \; | ||
| + | |||
| + | (allerdings haben dann alle normalen Files auch das exec Bit, müsste man nachdenken ob das stört) | ||
| + | |||
| + | Im Prinzip kann man jeden Befehl auf die gefundenen Dateien loslassen, also auch löschen und ähnliches - bei solchen Aktionen ist aber natürlich Vorsicht geboten und ein Backup sehr beruhigend. | ||
| + | |||
| + | ==== for-Schleifen ==== | ||
| + | |||
| + | Ein prima Beispiel, bei dem Schleifen praktisch sind: | ||
| + | |||
| + | Sie haben 200 Verzeichnisse, | ||
| + | |||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | |||
| + | |||
| + | Mittel einer einfachen for-Schleife kann man das auf Shell Ebene schnell beheben: | ||
| + | |||
| + | for dir in *; do chmod -R $dir.lehrer $dir; done | ||
| + | |||
| + | Dabei durchläuft die Variable dir alle Dateien (hier Verzeichnisse) die auf die Wildcard (hier *, also alle) passen. Weil dieser Wert anschließend in $dir zur Verfügung steht, kann man ihn zum anpassen der Eigentunsverhältnisse mittels chmod verwenden. | ||
| + | |||