1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 | #!/bin/bash # Dieses kleine Werkzeug entfernt laestige "Dinge" wie nicht mehr # benoetigte Dateien oder Prozesse "in einem Schwung". Es ist erfuellt # meine persoenlichen Anforderungen, ist aber deutlich verbesserungs- # wuerdig. # Nicht vergessen: Programm ausfuerbar machen (chmod +x "programmname")! # Autor: Andrej Stieben, stieben.de # Aktuelle Version: 0.0.1 # Letzte Aenderung: 27. Februar 2009 # Historie: # 27.02.09 Erste Version; "rm" und "kill" funktionieren. hilfetext() { echo echo "Dieses Programm entfernt Dinge aus einer Liste, z.B. Dateien" echo "und Prozesse." echo echo "Syntax:" echo " ./\"programmname\" kriterium kommando [argumente]" echo echo "\"kriterium\": Der Teil, nach dem gefiltert werden soll." echo "\"kommando\" : Unterstuetzt momentan \"rm\" und \"kill\"." echo "\"argumente\":" echo "- Bei \"rm\" Angabe darueber, in welchem Verzeichnis" echo " geloescht werden soll. Wenn keine Angabe vorliegt, wird vom" echo " aktuellen Verzeichnis ausgegangen." echo "- Bei \"kill\" Angabe ueber das zu sendende Signal. Standard-" echo " signal ist SIGKILL bzw. \"-9\", falls die Angabe fehlt." echo echo "Weitere (sinnlose) Argumente werden ignoriert." echo echo "Beispiele:" echo " (1) ./wegdamit \"~\" rm perl/" echo " ==> Entfernt alle temporaeren Dateien (mit der" echo " Endung \"~\") aus dem Unterverzeichnis perl." echo " (2) ./wegdamit firefox kill -9" echo " ==> Toetet alle Firefox-Prozesse." exit } if [ $# = 0 ] ; then hilfetext fi if [ $1 = "--help" -o $1 = "-h" -o $1 = "?" -o $1 = "/?" ] ; then hilfetext fi kriterium=$1 kommando=$2 if [ $kommando = "rm" ] ; then echo "Dateien werden geloescht (falls vorhanden)..." if [ $# = 3 ] ; then cd $3 fi anzahl_zeilen=`ls -al | grep $kriterium | awk '{ print $8 }' | wc -l` temp_n=0 while [ $temp_n -lt $anzahl_zeilen ] ; do rm `ls -al | grep $kriterium | awk '{ print $8 }' | head -1` temp_n=`echo $temp_n + 1 | bc` done echo "Fertig!" exit fi if [ $kommando = "kill" ] ; then echo "Prozesse werden getoetet (falls vorhanden)..." if [ $# = 3 ] ; then signal=$3 else signal="-9" fi anzahl_zeilen=`ps -A | grep $kriterium | awk '{ print $1 }' | wc -l` temp_n=0 while [ $temp_n -lt $anzahl_zeilen ] ; do kill $signal `ps -A | grep $kriterium | awk '{ print $1 }' | head -1` temp_n=`echo $temp_n + 1 | bc` done echo "Fertig!" exit fi |
Das Wahlpflichtfach "Unix und Shellprogrammierung" an der Hochschule hat sich gelohnt; ich kann nun selbst Werkzeuge schreiben, die mir die Arbeit erleichtern. Das jüngste (und eigentlich auch erste) Beispiel dafür ist "Weg damit!", eine Art Stapelverarbeitung für Dinge, die man aus dem System entfernen möchte. Bisher brauchte ich nichts anderes als die beiden Kommandos rm (für Dateien) und kill (für Prozesse). Ich bin jedoch sehr gern für Verbesserungsvorschläge offen; dass man es (viel) besser machen kann, ist mir klar.