Как продолжение моего предыдущего вопроса , если у меня есть несколько файлов в форме
sw.ras.001
sw.ras.002
sw.ras.003
…
Какую команду я могу использовать для удаления ras.
в середине всех файлов?
Как продолжение моего предыдущего вопроса , если у меня есть несколько файлов в форме
sw.ras.001
sw.ras.002
sw.ras.003
…
Какую команду я могу использовать для удаления ras.
в середине всех файлов?
ras
, т.е. в конечном итогеsw..001
, илиras.
, в результате чегоsw.001
?\.
в шаблоны.Ответы:
Вы можете сделать это с помощью довольно небольшой модификации любого ответа из последнего вопроса:
или
Объяснение:
rename
этоperl
скрипт, который принимаетperl
регулярное выражение и список файлов, применяет регулярное выражение к имени каждого файла по очереди и переименовывает каждый файл в результате применения регулярного выражения. В нашем случаеras
сопоставляется буквально и\.
совпадает с литералом.
(поскольку.
один указывает на любой символ, кроме новой строки), и он заменяет его ничем.for
Цикл принимает все файлы , которые начинаются сsw.ras.
(стандартной оболочкой Glob) и петлю над ними.${var/search/replace}
поиск$var
поsearch
и заменяет первое вхождение сreplace
, так${file/ras./}
возвращается$file
с первымras.
удалены. Таким образом, команда переименовывает файл с тем же именем минусras.
. Обратите внимание, что при этом поиск и замена,.
воспринимается буквально, а не как специальный символ.источник
Другой вариант - использовать mmv (Mass MoVe и переименовать):
Не забудьте использовать одинарные кавычки вокруг ваших шаблонов, в противном случае звезды будут расширяться на уровне оболочки.
Утилита не всегда доступна, но если это не так, вы можете установить ее с помощью:
Смотрите страницу руководства здесь .
источник
В любом POSIX-совместимой оболочки (
bash
,dash
,ksh
и т.д.):Или с
rename
:источник
Недавно мне пришлось сделать массовое переименование ряда файлов, где мне пришлось заменить последнее вхождение символа, когда этот символ встречался несколько раз в именах файлов. В этом конкретном случае мне пришлось заменить последнюю черту
-
на подчеркивание_
, повернув это:в это:
Это заняло некоторое время, но это, наконец, сделал это:
Вот:
${i%-*}
соответствует началу имени файла до последнего появления тире-
${file##*-}
соответствует остальной части имени файла после последнего появления тире-
источник