Я не могу заставить это работать:
У меня есть сотни файлов, в которые наш разработчик базы данных по глупости вставил звездочки, поэтому у нас есть файлы с такими именами:
*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
Вам нужно экранировать все символы * с помощью обратной косой черты \