Передача sed во временную переменную

Передача sed во временную переменную

Я пытаюсь массово изменить некоторые файлы в bash, в расширениях которых есть пробелы и нежелательные окончания.

Например, из

abc.pdf.!ut.!ut

к

abc.pdf

Я покажу весь прогресс на случай, если я сделал что-то сложнее, чем оно должно быть на самом деле. Поэтому сначала я начал с чего-то вроде

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

Вышеуказанное не работало для пробелов при отправке mv, поэтому я изменил на это

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

Это почти сработало, но mv начал говорить произвольное сообщение

usage: mv [-f | -i | -n] [-v] source target
       mv [-f | -i | -n] [-v] source ... directory

Я что-то перемудрил?

решение1

Так что если вы просто хотите удалить окончание, !ut.!utя бы предложил что-то вроде этого:

for file in `find ...`; do
  mv "$file" "${file%.\!ut.\!ut}"
done

В этом случае оболочка выполняет свою работу и удаляет окончание. Эта функция называетсярасширение параметра.

Связанный контент