Rheinwerk Computing < openbook > Rheinwerk Computing - Professionelle Bücher. Auch für Einsteiger.
Professionelle Bücher. Auch für Einsteiger.

 << zurück
Shell-Programmierung von Jürgen Wolf
Einführung, Praxis, Referenz
Buch: Shell-Programmierung

Shell-Programmierung
782 S., mit CD, 44,90 Euro
Rheinwerk Computing
ISBN 3-89842-683-1
gp Kapitel 15 Die Praxis
  gp 15.1 Alltägliche Lösungen
    gp 15.1.1 Auf alphabetische und numerische Zeichen prüfen
    gp 15.1.2 Auf Integer überprüfen
    gp 15.1.3 echo mit oder ohne -n
  gp 15.2 Datei-Utilities
    gp 15.2.1 Leerzeichen im Dateinamen ersetzen
    gp 15.2.2 Dateiendungen verändern
    gp 15.2.3 Nach veränderten Dateien in zwei Verzeichnissen vergleichen
  gp 15.3 Systemadministration
    gp 15.3.1 Benutzerverwaltung
    gp 15.3.2 Systemüberwachung
  gp 15.4 Backup-Strategien
    gp 15.4.1 Warum ein Backup?
    gp 15.4.2 Sicherungsmedien
    gp 15.4.3 Varianten der Sicherungen
    gp 15.4.4 Bestimmte Bereiche sichern
    gp 15.4.5 Backup über ssh mit tar
    gp 15.4.6 Daten mit rsync synchronisieren
    gp 15.4.7 Dateien und Verzeichnisse per E-Mail versenden
    gp 15.4.8 Startup-Scripts
  gp 15.5 World Wide Web und HTML
    gp 15.5.1 Analysieren von access_log (Apache)
    gp 15.5.2 Analysieren von error_log (Apache)
  gp 15.6 CGI (Common Gateway Interface)
    gp 15.6.1 CGI-Scripts ausführen
    gp 15.6.2 CGI-Environment ausgeben
    gp 15.6.3 Einfache Ausgabe als Text
    gp 15.6.4 Ausgabe als HTML formatieren
    gp 15.6.5 Systeminformationen ausgeben
    gp 15.6.6 Kontaktformular
    gp 15.6.7 Noch ein Tipp


Rheinwerk Computing

15.2 Datei-Utilitiedowntop


Rheinwerk Computing

15.2.1 Leerzeichen im Dateinamen ersetzen  downtop

Befinden sich auf Ihrem Rechner mal wieder eine Menge Dateien oder Verzeichnisse mit einem Leerzeichen zwischen dem Dateinamen, wie dies häufig bei MS-Windows- oder MP3-Dateien verwendet wird, dann können Sie entweder jede Datei von Hand oder aber gleich alle auf einmal mit einem Shellscript ersetzen. Das folgende Shellscript übernimmt diese Arbeit für Sie. Es werden alle Dateien und Verzeichnisse im aktuellen Verzeichnis mit einem oder mehreren Leerzeichen ersetzt. Statt eines Leerzeichens wird hierbei das Unterstrichzeichen verwendet – natürlich können Sie selbst das Zeichen wählen.

#! /bin/sh
# Name: replaceSpace
# Ersetzt Leerzeichen in Datei- bzw. Verzeichnisnamen durch '_'
space=' '
replace='_' # Ersetzungszeichen
# Ersetzt alle Datei- und Verzeichnisnamen im
# aktuellen Verzeichnis
for source in *
do
   case "$source" in
   # Ist ein Leerzeichen im Namen vorhanden ...
      *"$space"*)
         # Erst mal den Namen in dest speichern ...
         dest=`echo "$source" | sed "s/$space/$replace/g"`
         # ... überprüfen, ob bereits eine Datei bzw.
         # ein Verzeichnis mit gleichem Namen existiert
         if test -f "$dest"
         then
            echo "Achtung: "$dest" existiert bereits ... \
                  (Überspringen)" 1>&2
            continue
         fi
         # Vorgang auf der Standardausgabe mitschreiben
         echo mv "$source" "$dest"
         # Jetzt ersetzen ...
         mv "$source" "$dest"
         ;;
   esac
done

Das Script bei der Ausführung:

you@host > ./replaceSpace
mv 01 I Believe I can fly.mp3 01_I_Believe_I_can_fly.mp3
mv Default User Default_User
mv Meine Webseiten Meine_Webseiten
mv Dokumente und Einstellungen Dokumente_und_Einstellungen
mv Eigene Dateien Eigene_Dateien

Natürlich lässt sich das Script erheblich erweitern. So könnten Sie in der Kommandozeile beispielsweise selbst angeben, was als Ersetzungszeichen verwendet werden soll.


Rheinwerk Computing

15.2.2 Dateiendungen verändern  downtop

Manchmal will man z. B. aus Backup-Zwecken die Endung von Dateien verändern. Bei einer Datei ist dies kein Problem, aber wenn hierbei ein paar Dutzend Dateien umbenannt werden sollen, wird einem mit einem Shell-Script geholfen. Das folgende Script ändert alle Dateiendungen eines bestimmten Verzeichnisses.

#!/bin/sh
# renExtension – Alle Dateiendungen eines speziellen
# Verzeichnisses ändern
# Verwendung : renExtension directory ext1 ext2
# Beispiel: renExt mydir .abc .xyz – "ändert '.abc' nach '.xyz'
renExtension() {
   if [ $# -lt 3 ]
   then
      echo "usage: $0 Verzeichnis ext1 ext2"
      echo "ex: $0 mydir .abc .xyz   (ändert .abc zu .xyz)"
      return 1
   fi
   # Erstes Argument muss ein Verzeichnis sein
   if [ -d "$1" ]
   then :
   else
      echo "Argument $1 ist kein Verzeichnis!"
      return 1
   fi
   # Nach allen Dateien mit der Endung $2 in $1 suchen
   for i in `find . $1 -name "*$2"`
   do
      # Suffix $2 vom Dateinamen entfernen
      base=`basename $i $2`
      echo "Verändert: $1/$i Nach: $1/${base}$3"
      # Umbenennen mit Suffix $3
      mv $i $1/${base}$3
   done
   return 0
}
# Zum Testen
#
renExtension $1 $2 $3

Das Script bei der Ausführung:

you@host > ls mydir
file1.c  file2.c  file3.c
you@host > ./renExtension mydir .c .cpp
Verändert: mydir/mydir/file1.c Nach: mydir/file1.cpp
Verändert: mydir/mydir/file2.c Nach: mydir/file2.cpp
Verändert: mydir/mydir/file3.c Nach: mydir/file3.cpp
you@host > ls mydir
file1.cpp  file2.cpp  file3.cpp

Tipp   Wollen Sie hierbei lieber eine Kopie erstellen, statt eine Umbenennung des Namens vorzunehmen, so müssen Sie hier nur das Kommando mv durch cp ersetzen.



Rheinwerk Computing

15.2.3 Nach veränderten Dateien in zwei Verzeichnissen vergleichen  toptop

Gern kopiert man ein Verzeichnis, um eine Sicherungskopie in der Hinterhand zu haben. Wenn Sie nun nach längerer Zeit wieder an den Dateien in dem Verzeichnis gearbeitet haben oder eventuell mehrere Personen einer Gruppe mit diesen Dateien arbeiten, möchte man doch wissen, welche und wie viele Dateien sich seitdem geändert haben. Sicherlich gibt es hierzu bessere Werkzeuge wie CVS oder SUBVERSION, aber manchmal erscheint mir dies doch ein wenig überdimensioniert zu sein. Hierzu ein einfaches Shellscript, womit Sie sich einen schnellen Überblick verschaffen können.

#!/bin/sh
# diffDir() vergleicht zwei Verzeichnisse mit einfachen
# Dateien miteinander
diffDir() {
   if [ -d "$1" -a -d "$2" ]
   then :
   else
      echo "usage: $0 dir1 dir2"
      return 1
   fi
   count1=0; count2=0
   echo
   echo "Unterschiedliche Dateien : "
   for i in $1/*
   do
      count1=`expr $count1 + 1`
      base=`basename $i`
      diff -b $1/$base $2/$base > /dev/null
      if [ "$?" -gt 0 ]
      then
         echo "    $1/$base $2/$base"
         count2=`expr $count2 + 1`
      fi
   done
   echo "-------------------------------"
   echo "$count2 von $count1 Dateien sind unterschiedlich \
         in $1 und $2"
   return 0
}
# Zum Testen ...
diffDir $1 $2

Das Script bei der Ausführung:

you@host > ./diffDir Shellbuch_backup Shellbuch_aktuell
Unterschiedliche Dateien :
-------------------------------
0 von 14 Dateien sind unterschiedlich in Shellbuch_backup und Shellbuch_aktuell
you@host > cd Shellbuch_aktuell
you@host > echo Hallo >> Kap003.txt
you@host > echo Hallo >> Kap004.txt
you@host > echo Hallo >> Kap005.txt
you@host > ./diffDir Shellbuch_backup Shellbuch_aktuell
Unterschiedliche Dateien :
    Shellbuch_backup/Kap003.txt Shellbuch_aktuell/Kap003.txt
    Shellbuch_backup/kap004.txt Shellbuch_aktuell/kap004.txt
    Shellbuch_backup/kap005.txt Shellbuch_aktuell/kap005.txt
-------------------------------
3 von 14 Dateien waren unterschiedlich in Shellbuch_backup und Shellbuch_aktuell

Wem das ganze Beispiel zu umfangreich ist, dem kann ich auch noch einen Einzeiler mit rsync anbieten, der ebenfalls nach veränderten Daten zwischen zwei Verzeichnissen vergleicht:

rsync -avnx --numeric-ids --delete $1/ $2


Ihre Meinung

Wie hat Ihnen das Openbook gefallen? Wir freuen uns immer über Ihre Rückmeldung. Schreiben Sie uns gerne Ihr Feedback als E-Mail an kommunikation@rheinwerk-verlag.de.

 << zurück
  
  Zum Rheinwerk-Shop
Zum Rheinwerk-Shop: Shell-Programmierung
Shell-Programmierung
bestellen
 Buchtipps
Zum Rheinwerk-Shop: Shell-Programmierung






 Shell-Programmierung


Zum Rheinwerk-Shop: Linux-Server






 Linux-Server


Zum Rheinwerk-Shop: Das Komplettpaket LPIC-1 & LPIC-2






 Das Komplettpaket
 LPIC-1 & LPIC-2


Zum Rheinwerk-Shop: Linux-Hochverfügbarkeit






 Linux-
 Hochverfügbarkeit


Zum Rheinwerk-Shop: Linux Handbuch






 Linux Handbuch


 Lieferung
Versandkostenfrei bestellen in Deutschland, Österreich und der Schweiz
InfoInfo





Copyright © Rheinwerk Verlag GmbH 2005
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das Openbook denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt.
Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.


Nutzungsbestimmungen | Datenschutz | Impressum

Rheinwerk Verlag GmbH, Rheinwerkallee 4, 53227 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, service@rheinwerk-verlag.de

Cookie-Einstellungen ändern