On Fri, 12 Sep 2008, 18:25:21 +0200, Steffen Hanne wrote:
[...]
Am Freitag, 12. September 2008 14:37:49 schrieb Dr. Jürgen Vollmer:
Am Freitag, 12. September 2008 14:15:19 schrieb Steffen Hanne:
Hallo liebe Scriptfreunde,
ich hatte ja geschrieben, dass das Script welches ich fand mein Problem mit der Sortierung von Daten löst. Allerdings funktioniert das Script nicht, wenn Leerzeichen im Dateinamen/Verzeichnisnamen enthalten sind. Vielleicht kann mir jemand helfen.
schnipp>>>>>>>
#! /bin/sh # Usage: # findalpha [-R]
# Reorder the directory entries according to alphanumerical order, so # find output is in order. Useful for preparing files for play on an # MP3 player that follows directory order. # If -R is given, do recursively.
# Thu Dec 27 02:47:00 EST 2007 v. 0.1 jh initial version
# TODO: # handle spaces in file/directory names # figure out why it works on IDE but not on USB, even if the FS is ext3
if [ "$1" = "-R" ] ; then dirs=`find . -type d` else dirs=. fi for dir in $dirs; do cd "$dir" tmp=`mktemp -d -p .` mv `find . -maxdepth 1 -mindepth 1 | grep -v $tmp` $tmp cd $tmp mv `find . -maxdepth 1 -mindepth 1 | sort -n` .. cd .. rmdir $tmp cd "$start" done
das kann nicht funktionieren, - dirs=`find . -type d` enthält eine Liste von Wörtern, wenn da in den Verzeichnisnamen Blanks enthalten sind, dann ist das in $dirs nicht mehr zu erkennen. - mv `find ....` auch find liefert eine Liste von Dateinamen, die blanks enthalten können. mv betrachtet dies dann als separate Dateien.....
besser:
tmp=`mktemp -d -p /tmp`
find . -type d | \ while read d do
das
find $d -type f | \
muss natürlich find "$d" -type f | \ heissen
while read f do mv "$f" $tmp done find $tmp -type f | sort -n \ while read f do
das
mv "$f" $d
muß natürlich mv "$f" "$d" heissen
done done (ungetestet :-)
(ausversehen zu schnell den Send-Knopf gedrückt :-)
Bye ürgen
Hallo Jürgen,
nach deiner Anregung (danke dafür) sieht das Script jetzt so aus:
#! /bin/sh
# Usage: # findbeta
# Reorder the directory entries according to alphanumerical order, so # find output is in order. Useful for preparing files for play on an # MP3 player that follows directory order.
# Thu Dec 27 02:47:00 EST 2007 v. 0.1 jh initial version
tmp=`mktemp -d -p /tmp` find . -type d | \ while read d do find "$d" -type f | \ while read f do mv "$f" $tmp done find $tmp -type f | sort -n \
In der vorangehenden Zeile fehlt ein Pipe-Zeichen, also: find $tmp -type f | sort -n | \
while read f do <-hier ist der Fehler mv "$f" "$d" done done
Allerdings bekomme ich einen Syntaxfehler (unexpected token) in Zeile 23.
Kann jemand helfen?
HTH, cheers. l8er manfred PS: Wenn du das noch etwas einrueckst, wird das Script auch etwas uebersichtlicher ;-) Also vielleicht so: #! /bin/sh # Usage: # findbeta # Reorder the directory entries according to alphanumerical order, so # find output is in order. Useful for preparing files for play on an # MP3 player that follows directory order. # Thu Dec 27 02:47:00 EST 2007 v. 0.1 jh initial version tmp=`mktemp -d -p /tmp` find . -type d | \ while read d do find "$d" -type f | \ while read f do mv "$f" $tmp done find $tmp -type f | sort -n | \ while read f do mv "$f" "$d" done done -- 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