Я пытаюсь переименовать файлы следующим образом:
for file in *;
do
mv -i "$file" "$(echo "$file" | sed -e 's/[^A-Za-z0-9._-]/_/g')";
done
Но sed
команда заменяет все пробелы на _
.
Как я могу отредактировать sed
команду, чтобы она содержала пробелы вместе с указанными символами? Я пытался использовать, \s
но это не работает ...
РЕДАКТИРОВАТЬ:
Например: файл trip: hill
, должен быть переименован:, trip_ hill
но команда выше делает это trip__hill
.
command-line
bash
sed
batch-rename
Занна
источник
источник
Ответы:
Не анализируйте имена файлов с помощью
sed
! Выводecho "$file"
может быть не надежным.Использование
rename
. 17.10 сначала нужно установитьПотом:
Заметки
-n
после тестирования, чтобы фактически переименовать файлы--
конец опций, если любой файл начинается с-
[^-A-Za-z0-9_ .]
символы, которые мы не хотим заменять - ставьте-
первым или последним, чтобы он не мог указывать диапазон (он обрабатывается буквально в этих позициях)..
трактуется буквально (в других контекстах регулярных выражений он обозначает любой символ и должен быть экранирован).Это также работает в
sed
:Если я добавлю пробел в конец вашей версии, я получу сообщение об ошибке:
Но
-
в конце это работает:Так что, возможно, положение дефиса вызвало вашу проблему, когда вы добавили пробел. Но совет не разбирать имена файлов стоит!
источник
.
это буквально в классе персонажей. TIL!Вы также можете просто использовать оболочку, расширение параметра Bash может сделать замену:
Двойная косая черта говорит ему заменить все совпадения, кроме этого, синтаксис прост.
источник