Benutzer-Werkzeuge

Webseiten-Werkzeuge


 [[anwenderwiki:scripting:shell-find]] 
no way to compare when less than two revisions

Unterschiede

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>Kommandozeile shell bash}}
 +====== Dateimanipulation mit ''find'' und Schleifen ======
 +
 +Gelegentlich möchte man die Eigenschaften vieler Dateien auf einmal ändern: Beispielsweise wenn man die Zugriffrechte aller "public_html" Verzeichnisse der Benutzer ändern möchte.
 +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 "public_html" Verzeichnisse die Berechtigung 755 haben, also so:
 +  
 +  drwxr-xr-x    2 kruijuz   lehrer       4096 Nov 15  2004 public_html
 +
 +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 "chmod" 755 aus. Am Ende muss \; mit Leerzeichen davor sein, um das mit dem exec irgendwie zu regeln.
 +
 +===  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, die alle so heißen, wie ihr Besitzer - AKA Homeverzeichnisse, allerdings haben diese den falschen Besitzer, z.B. nach einem Backup mit ungeeigneten Mitteln auf ungeeignete Dateisysteme ;-)  Also so:
 +   
 +   drwxr-s--x   30 admin    lehrer       4096 Sep 19 19:13 .
 +   drwxrwxrwt   34 root     root        12288 Oct  4 18:37 ..
 +   drwxr-s--x   10 root     root         4096 Sep 19 16:00 holztrla
 +   drwxr-s--x   10 root     root         4096 Sep 19 15:54 horstmca
 +   drwxr-s--x   10 root     root         4096 Sep 19 16:00 jhinjeam
 +   drwxr-s--x   10 root     root         4096 Sep 19 15:56 kepplegw
 +   drwxr-s--x   10 root     root         4096 Sep 19 16:00 kimmigjo
 +   drwxr-s--x   10 root     root         4096 Sep 19 15:56 knoellra
 +   drwxr-s--x   10 root     root         4096 Sep 19 16:01 kramerju
 +
 +
 +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.
 +
  
 [[anwenderwiki:scripting:shell-find]] anwenderwiki/scripting/shell-find.txt · Zuletzt geändert: 2012/12/23 23:20 von 127.0.0.1