Hallo, Am Mon, 28 Apr 2008, Andre Tann schrieb:
ich möchte alle Dateien suchen, die ein & im Namen haben, und dieses durch _ ersetzen. Warum funktioniert das hier nicht:
find . -iname '*&*' | while read xx; do mv "\"$xx\"" "'$(echo $xx | ^^ ^^ ^ sed 's/&/_/g')'"; done ^ Was sollen diese Anführungszeichen?
[..]
Woran fehlt es?
An der systematischen Herangehensweise was das Quoten angeht. find . -iname '*&*' | while read -r xx; do \ mv -i "$xx" "$(echo "$xx" | sed 's/&/_/g')" done oder: find . -iname '*&*' | while read -r xx; do \ mv -i "$xx" "$(echo "$xx" | tr '&' '_')" done oder: find . -iname '*&*' | while read -r xx; do \ mv -i "$xx" "`echo \"$xx\" | tr '&' '_'`" done Das 'mv -i' falls der neue Dateiname bereits existiert. Man beachte den Unterschied zwischen `` und $(). Innerhalb von `` müssen die inneren "" escped werden, innerhalb von $() nicht. Und wieder, wie schon von anderen angemerkt: set -x hilft dabei, solche Probleme zu erkennen. -dnh -- Er will sie nicht? Er, will sie nicht? Er will, sie nicht? Er will sie, nicht? -- Sascha Broich -- 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