Benutzer-Werkzeuge

Webseiten-Werkzeuge


 [[anwenderwiki:scripting:shell-find]] 

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

anwenderwiki:scripting:shell-find [2012/12/23 22:20] (aktuell)
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 22:20 (Externe Bearbeitung)