Заменить подстановочный знак в именах файлов

Я не могу заставить это работать:

У меня есть сотни файлов, в которые наш разработчик баз данных по глупости вставил звездочки, поэтому у нас есть файлы с такими именами:

*1*_Floorplan.jpg

Мне нужно рекурсивно (два уровня в) искать и заменять все экземпляры "*"во всех именах файлов и заменить их подчеркиванием"_".

Я пробовал следующее, но это не удается, выводя формат использования для команды "mv" сотни раз (как если бы для каждого файла он пытался обработать), как я и ожидал, если бы у меня был неверный синтаксис, но я не могу найти, что с ним не так:

for x in `find . -regex '.*/\*.*'` ; do mv $x `echo $x | sed s/\*/_/g` ; done

Это на системе Mac (10.4), так что это среда Дарвина, если это что-то меняет.

Пожалуйста помоги!

2 ответа

Решение

Поместите кавычки вокруг $x везде, где это появляется.

for x in `find . -regex '.*/\*.*'` ; do mv "$x" `echo "$x" | sed s/\*/_/g` ; done

Вам нужно убежать от всех звездочек с обратной косой чертой \

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