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