Назад | Перейти на главную страницу

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

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

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

*1*_Floorplan.jpg

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

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

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

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

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

Ставьте кавычки вокруг $ x везде, где он появляется.

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

Вам нужно экранировать все символы * с помощью обратной косой черты \