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. | ||
+ | |||