On Fri 12 Sep 2008, Steffen Hanne wrote:
tmp=`mktemp -d -p /tmp` find . -type d | \
Der Backslash am Ende ist unnötig. In den ähnlichen Zeilen unten auch.
while read d do find "$d" -type f | \ while read f do mv "$f" $tmp done find $tmp -type f | sort -n \
Das ist einfach. In voriger Zeile hast Du das Pipe-Symbol am Ende vergessen.
while read f do <-hier ist der Fehler mv "$f" "$d" done done
Das Ding ist trotzdem noch unsicher. Ein Dateiname darf nämlich durchaus ein Newline enthalten, nicht nur Spaces. Das würde Dein Script nochmal durcheinander bringen, weil read zeilenweise liest. Ich würde find mit -print0 und xargs mit -0i einsetzen. Außerdem denke ich, in dem Script kam die Logik etwas durcheinander. Du suchst in . rekursiv Unterverzeichnisse (1. find-Befehl). Dann nimmst Du jedes Unterverzeichnis (wobei . nochmal auftaucht), suchst darin Dateien, um sie nach $tmp zu verschieben (find Nummer 2). Wenn Du nun alle Dateien eines Unterverzeichnisses nach $tmp verschoben hast, suchst Du nochmal in $tmp nach Dateien und verschiebst diese nach $d (3. find). Gut, ich habe es begriffen, Du willst das Zeug in $tmp haben, damit Du nach Dateinamen sortieren kannst. Kommst Du nicht mit folgendem zum selben Resultat? find . -type f -print0 | perl -n0e '$base=$_; $base=~s!.*/!!; $names{$base}=$_; END {print map $names{$_}, sort keys %names}' | xargs -0i^ mv ^ "$d"/ Das ist alles in eine Zeile geschrieben. Torsten -- Need professional mod_perl support? Just hire me: torsten.foertsch@gmx.net -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org