Shell Scripting
Shellp Programmierung, Pattern Matching, Kornshell, Regular Expressions
-
Powershell Tip: Find all files larger than X bytes in a directory structure
In order to output all files larger than a certain size on Windows systems, you do not have to use the explorer search. A Powershell script does this very efficiently. The result is shown in a gridview window: If the last part | Out-GridView is omitted, the output in the console is required.
-
Umbenennung von Dateien per powershell
In Linux Umgebungen haben Administratoren für Logdateien von WebSphere Application Server, Tomcat und andere Middleware Produkte meist Skripte, um die Protokolle täglich oder wöchentlich umzubenennen (per crontab). Unter Windows habe ich auf die schnelle keine vernünftige Scriptlösung gefunden. Meine Lösung stelle ich in meinem Azure DevOps Projekt pwshLogSwitch zur Verfügung. Das kleine Script erwartet mindestens ein Startverzeichnis als Parameter. Alle Dateien in diesem Verzeichnis und darunter werden umbenannt, solange die Kriterien passen. Die Auswahlkriterien werden mit den Parametern -Filter -IncludePattern -ExcludePattern definiert und entsprechen den gleichnamigen Parametern von Get-ChildItem. Es können auch reguläre Ausdrücke und Wildcards übergeben werden. Als Verzeichnis können mehrere Verzeichnisnamen per : getrennt übergeben werden. IncludePattern und…
-
Powershell Tail und Head vereint
Ausgabe der letzten und der ersten n-Zeilen in einemBefehl In Unix/Linux Derivaten sind die Befehle tail und Head oft benutzte Werkzeuge zur Ausgabe der ersten/letzten Zeilen einer Datei oder der Ergebnisse eines Befehls. Direkt kombinieren kann man sie nicht. Hier sind sed/awk und andere Werkzeuge und Lösungen gefordert. Powershell bietet eine sehr effiziente Lösung. Der erste Ansatz wäre die Ausgabe mit Select -Last und Select -First zu behandeln. Get-ChildItem somefolder | Select -First 10 Get-ChildItem somefolder | Select -Last 10 Das geht aber nicht in einem Befehl (oder nur mit einer zu schreibenden Funktion). Damit haben wir das gleiche Problem wie mit head und tail in Unix. Per Get-ChildItem und…
-
Powershell tail für Textdateien
In Powershell kann die Ausgabe der letzten n Zeilen in grossen Text/Ascii Dateien mit der -tail Option von Get-Content erfolgen: Get-Content meineRiesigeDatei.csv -tail 25 Seit Powershell v3 bietet Get-Content (oder der zugehörige alias gc) die Option -tail. Leider gibt es keinen tail -f zur fortlaufenden Aktualisierung.
-
Powershell Equivalent zu Unix ‘ls -ltr | tail’
In Powershell kann die Ausgabe der neuesten n-Dateien mit diesem Befehl erfolgen: gci | sort LastWriteTime | select -last 60 In diesem Beispiel werden die Dateien im aktuellen Verzeichnis mit gci ausgegeben, nach letztem Schreibzugriff mit sort sortiert (neueste zuletzt) und dann werden nur die letzten 60 per select last 60 ausgegeben.
-
Welcher Prozess belegt wieviel Swap?
Wenn die Kommandos (in den Linux Varianten Debian, Ubuntu, RedHat und ähnlich) free cat /proc/swaps swapon -s eine hohe Auslastung des Swap Spaces anzeigen, kommt die Frage nach dem Verbraucher des Swap hoch. Folgendes Miniskript gibt die Liste der Prozesse nach Größe des belegten Swap an. Mit der Variable THRESHOLD kann man die Liste auf die Verbraucher eingrenzen, die mehr als diesen Wert in kB an Swap belegen. THRESHOLD=5000 for pid in `ls /proc`; do vmswap=`awk '/VmSwa/{print $2}' /proc/${pid}/status 2>/dev/null`; if [ ${vmswap} -gt ${THRESHOLD} ];then pName=`ps -ef|awk '$2=="'"${pid}"'" {print $8}'`; echo "PID ${pid}: ${vmswap} kB (${pName})"; fi; done 2>/dev/null|sort -un -k3 Die Ausgabe sieht wie folgt aus: PID 123857:…
-
PowerShell Drive alias:
PowerShell nutzt das Konzept der Laufwerke (=PowerShell Drives) sehr ausgiebig. So werden die Umgebungsvariablen in env: verwaltet, die Windows Registry aber auch die “normalen” Laufwerke wie “C:”. Auch Aliasse für Kommandos sind ein PowerShell Drive sind. Get-ChildItem alias:
-
Mehrfache Einträge in großen Konfigurationsdateien oder Protokollen finden (Windows Powershell Lösung)
Im Post Mehrfache Einträge in großen Konfigurationsdateien oder Protokollen finden(Linux/Unix) habe ich gezeigt, wie mehrfach vorkommende Zeilen in Textdateien gefunden und automatisch entfernt werden können. Windows hat im Zuge der Powershell ein mächtiges Werkzeug, dass dies auch kann. (Seit dem Windows 10 1709 Update kann man natürlich auch einfach die eingebaute bash nehmen….) Zur Demonstration verwende ich eine Datei duplicates.txt: Get-Content -Path duplicates.txt Zeile kommt nur einmal vor Zeile kommt zweimal vor Zeile kommt dreimal vor Zeile kommt zweimal vor Zeile kommt dreimal vor Zeile kommt auch nur einmal vor Zeile kommt dreimal vor Mehrfache vorkommende identische Zeilen und deren Anzahl findet und zählt man wie mit Group-Object Get-Content -Path…
-
Mehrfache Einträge in großen Konfigurationsdateien oder Protokollen finden (Linux/Unix Lösung)
Oft vermutet man in größeren Protokolldateien oder Konfigurationsdateien mehrfach vorhandene Einträge. Diese sollen schnell ermittelt und bei Bedarf entfernt werden. Unter Linux gibt es das Werkzeug uniq. Der Parameter --count gibt alle Zeilen aus und die Häufigkeit Ihres Auftretens in der ersten Spalte. Es funktioniert nur nicht so intuitiv, wie erwartet. Ich versuche es an einem Beispiel: uniq –count console.log 1 <?xml version=”1.0″ encoding=”UTF-8″ ?> 1 <Protokollzeile xxxyyyzzz > Diese Datei hat offensichtlich zwei Zeilen insgesamt und beide unterscheiden sich. Das ist im Moment nicht sehr hilfreich. Daher verdoppele ich die Datei und füge eine einzeln vorkommende Zeile hinzu: cat console.log >> consoleDup.log cat console.log >> consoleDup.log echo “Eine abweichende…
-
Windows bash – Zugriff auf lokale Verzeichnisse
Lokale Verzeichnisse in der Windows Bash können über den automatischen eingebunden Mount /mnt/ gelesen und geändert werden. [user1:/mnt/d/Cache] $ ls -ld /mnt/* drwxrwxrwx 0 root root 512 Mar 19 10:17 /mnt/c drwxrwxrwx 0 root root 4096 Mar 19 10:17 /mnt/d Der Zugriff auf C:\Users\user1\Documents (= Eigene Dokumente des Benutzers user1) erfolgt beispielsweise per: ls /mnt/c//Users/user1/Documents/