
Ich versuche, in Bash mehrere Dateien zu ändern, deren Erweiterung Leerzeichen und unerwünschte Endungen enthält.
Zum Beispiel von
abc.pdf.!ut.!ut
Zu
abc.pdf
Ich werde den gesamten Fortschritt zeigen, falls ich etwas schwieriger gemacht habe, als es eigentlich sein sollte. Also habe ich zuerst mit etwas wie
for file in `find /Users/phwd/Desktop/Film\ Sheet\ Music\ Scores\ 2 *.\!ut.\!ut`;
do
mv $file `echo $file | sed 's/\(.*\)\.\!\ut\.\!\ut/\1/'`;
done
Das Obige funktionierte bei Leerzeichen beim Senden für mv nicht, also habe ich es folgendermaßen geändert
find /Users/phwd/Desktop/Film\ Sheet\ Music\ Scores\ 2 *.\!ut.\!ut | while read file
do
mv $file `echo $file | sed 's/\(.*\)\.\!\ut\.\!\ut/\1/'`;
done
Das hat fast funktioniert, aber mv hat angefangen, eine beliebige Nachricht zu sagen
usage: mv [-f | -i | -n] [-v] source target
mv [-f | -i | -n] [-v] source ... directory
Ich denke zu viel über etwas nach?
Antwort1
Wenn Sie also nur die Endung entfernen möchten, !ut.!ut
würde ich so etwas vorschlagen:
for file in `find ...`; do
mv "$file" "${file%.\!ut.\!ut}"
done
In diesem Fall erledigt die Shell ihre Aufgabe und entfernt die Endung. Diese Funktion heißtParametererweiterung.