Übergeben von sed an eine temporäre Variable

Übergeben von sed an eine temporäre Variable

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.!utwü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.

verwandte Informationen