
Я пытаюсь массово изменить некоторые файлы в 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
В этом случае оболочка выполняет свою работу и удаляет окончание. Эта функция называетсярасширение параметра.