Hallo, vielleicht kann mir jemand mal paar Anregungen geben. Hier die Aufgabe.
Es soll in einem großem Verzeichnisbaum alle Verzeichnisse gefunden werden, deren Verzeichnisname einer Jahreszahl entspricht. (z.B. 1988, 1999). Die gefundenen Verzeichnise
sollen um ein Ebene nach oben verschoben werde. Die zu verschiebenden Verzeichnise sind nicht leer. Es kommt dabei die tcsh zum Einsatz. Mit find funktioniert das auffinden der Verzeichnisse schon, aber irgendwie klappt es nicht diese Infos auch zu verwerten.
Foreach geht nicht, eine Pipe hab' ich nicht hinbekommen etc. Hat jemand eine Idee?
Danke für Eure Bemühungen.
Malit
Shellscript zum Verschieben von Verzeichnissen
Re: Shellscript zum Verschieben von Verzeichnissen
tcsh habe ich nie richtig zum Skripten gemocht... Nicht Fisch und nicht Fleisch, die Syntax. Aber egal:
<blockquote><pre><font size="1" face="">code:</font><hr><font face="Courier New" size="2">#!/bin/tcsh
foreach DIR ( `find . -type d -name '[<!--no-->0-9][<!--no-->0-9][<!--no-->0-9][<!--no-->0-9]' -depth -print` )
set PATH_OF_DIR=`dirname $DIR`
( cd $PATH_OF_DIR ; mv $DIR .. )
end
</font><hr></pre></blockquote>
Die foreach-Schleife setzt einen vom find gefundenen Verzeichnisnamen pro Schleifendurchlauf in DIR. PATH_TO_DIR wird auf den Pfad-Anteil des Verzeichnissnamens gesetzt. In der mit runden Klammern gestarteten Subshell wird in das Verzeichnis gewechselt, in der das gefundene Verzeichnis steht und eine Ebene jöher gemovet. Das cd-Kommando betrifft nur die Subshell, daher steht das Skript zum nächsten Schleifedurchlauf wieder im Start-Arbeitsverzeichnis. Ob die Verzeichnisse leer sind oder nicht, sollte durch die "-depth"-Option zum find gegessen sein; mv macht zumindest unter Linux keine Schwierigkeiten dabei.
Und im übrigen ist die man-Page zu tcsh undurchsichtig. <img src="http://www.pl-forum.de/UltraBoard/Images/Happy.gif" border="0" align="middle">
Jochen
<blockquote><pre><font size="1" face="">code:</font><hr><font face="Courier New" size="2">#!/bin/tcsh
foreach DIR ( `find . -type d -name '[<!--no-->0-9][<!--no-->0-9][<!--no-->0-9][<!--no-->0-9]' -depth -print` )
set PATH_OF_DIR=`dirname $DIR`
( cd $PATH_OF_DIR ; mv $DIR .. )
end
</font><hr></pre></blockquote>
Die foreach-Schleife setzt einen vom find gefundenen Verzeichnisnamen pro Schleifendurchlauf in DIR. PATH_TO_DIR wird auf den Pfad-Anteil des Verzeichnissnamens gesetzt. In der mit runden Klammern gestarteten Subshell wird in das Verzeichnis gewechselt, in der das gefundene Verzeichnis steht und eine Ebene jöher gemovet. Das cd-Kommando betrifft nur die Subshell, daher steht das Skript zum nächsten Schleifedurchlauf wieder im Start-Arbeitsverzeichnis. Ob die Verzeichnisse leer sind oder nicht, sollte durch die "-depth"-Option zum find gegessen sein; mv macht zumindest unter Linux keine Schwierigkeiten dabei.
Und im übrigen ist die man-Page zu tcsh undurchsichtig. <img src="http://www.pl-forum.de/UltraBoard/Images/Happy.gif" border="0" align="middle">
Jochen
Re: Shellscript zum Verschieben von Verzeichnissen
Danke Jochen!
Die tcsh ist nicht meine Idee, das ganze läuft auf MacOSX. (Eine Bash ist mir auch lieber)
Wieso die Klammern in der 3. Zeile?
Malit
Die tcsh ist nicht meine Idee, das ganze läuft auf MacOSX. (Eine Bash ist mir auch lieber)
Wieso die Klammern in der 3. Zeile?
Malit
Re: Shellscript zum Verschieben von Verzeichnissen
An Jochen, vergiß die Frage nach den Runden Klammern. Hatte Deinen Kommentar übersehen.
Malit
Malit