Я использую инструмент переименования Perl для написания bash-скрипта, который ищет любые файлы в пути, в которых есть пробелы (он делает другие вещи, но старается сохранить это простым). Я использую переключатель -c для преобразования в нижний регистр и регулярное выражение для замены всех пробелов на тире. Команда завершается без ошибок.
rename -f -X -c 's/[ ]+/-/g' /Volumes/data/Users-Links/adrz/test-site/with\ spaces/*
Приведенное выше преобразовывает файлы в нижний регистр, но не заменяет пробелы тире. Затем я попытался с ключом -e перед выражением.
rename -f -X -c -e 's/[ ]/-/g' /Volumes/data/Users-Links/adrz/test-site/with\ spaces/*
и получил ...
Can't rename '/ Volumes/ data / Users-Links / adrz / тест-сайт / с пробелами / hello world.txt 'to' / объемы / данные / пользователи-ссылки / adrz / тест-сайт / с пробелами / hello world.txt ': нет такогофайл или каталог
Кажется, он действует на имя каталога, в котором есть пробелы, а также на файлы внутри каталога. Отметим, что если в пути нет пробелов, он работает нормально.
Я пробовал:
- Использование двойных кавычек, одинарных кавычек и / для экранирования пробелов в пути.
- Я пытался использовать команды Subst и Subs-all с одинаковыми ошибками
Я искал несколько недель и не могу разобраться. Это ошибка в инструменте или в моем уме?
Спасибо.