Пытаясь сделать пакетное переименование, не могу понять правильный RegEx

Я пытаюсь переименовать мою коллекцию фильмов. Все файлы в настоящее время именуются с использованием точек вместо пробелов, то есть Men.in.Black.avi. Я хочу заменить все точки пробелами, что не очень сложно, но мне нужно сохранить последнюю точку для расширения файла, т.е.

Мой Google не дал никаких решений. Я также являюсь разработчиком Javascript и мог видеть некоторые привлекательные приложения для него. Итак, есть предложения?

2
задан 21 October 2012 в 20:12

3 ответа

Один из способов - использовать утилиту Perl rename . Регулярное выражение Perl \.(?=.*\.) соответствует точке только тогда, когда есть другая точка позже.

rename 's/\.(?=.*\.)/ /g' *.*.*

Если вы хотите работать также с файлами в подкаталогах:

shopt -s globstar    # you can put this in your ~/.bashrc
rename 's/\.(?=.*\.)/ /g' **/*.*.*

Это работает, если у вас нет точек в именах каталогов. В противном случае я думаю, что самым простым способом было бы использовать find:

find -depth -name '*.*.*' -exec rename 's/\.(?=.*\.)/ /g' {} +

В качестве альтернативы, используя zsh (это только переименовывает обычные файлы и оставляет имена каталогов в одиночку, из-за спецификатора glob (.) в конце) ):

autoload zmv    # you can put this in your ~/.zshrc
zmv -Q '(**/)(*.*)(.[^.]##)(.)' '$1${2//./ }$3'
0
ответ дан 21 October 2012 в 20:12

При написании этого вопроса мне пришло в голову, что я не проверял Ubuntu Software Center. Я нашел приложение pyRenamer, которое отлично справилось с задачей. В итоге я просто изменил все точки на пробелы, затем изменил все экземпляры расширений файлов, которым предшествовал пробел, то есть «avi», «mp4», «ogg», чтобы заменить пробелы точками. Это не лучший вариант, так как в названии может быть фильм с avi или ogg, что будет очень неприятно, но на этот раз это сработало.

Я все еще заинтересован в более простом решении RegEx.

0
ответ дан 21 October 2012 в 20:12
cd $movielibrary
rename -n 's/\./ /g;s/ ([^ ]*$)/.$1/' *

Это выглядит хорошо? Повторите последнюю команду без -n.

0
ответ дан 21 October 2012 в 20:12

Другие вопросы по тегам:

Похожие вопросы: