Передача 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
задан 29 November 2015 в 19:04

1 ответ

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

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

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

0
ответ дан 29 November 2015 в 19:04

Другие вопросы по тегам:

Похожие вопросы: