Я пытаюсь переименовать мою коллекцию фильмов. Все файлы в настоящее время именуются с использованием точек вместо пробелов, то есть Men.in.Black.avi. Я хочу заменить все точки пробелами, что не очень сложно, но мне нужно сохранить последнюю точку для расширения файла, т.е.
Мой Google не дал никаких решений. Я также являюсь разработчиком Javascript и мог видеть некоторые привлекательные приложения для него. Итак, есть предложения?
Один из способов - использовать утилиту 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'
При написании этого вопроса мне пришло в голову, что я не проверял Ubuntu Software Center. Я нашел приложение pyRenamer, которое отлично справилось с задачей. В итоге я просто изменил все точки на пробелы, затем изменил все экземпляры расширений файлов, которым предшествовал пробел, то есть «avi», «mp4», «ogg», чтобы заменить пробелы точками. Это не лучший вариант, так как в названии может быть фильм с avi или ogg, что будет очень неприятно, но на этот раз это сработало.
Я все еще заинтересован в более простом решении RegEx.
cd $movielibrary
rename -n 's/\./ /g;s/ ([^ ]*$)/.$1/' *
Это выглядит хорошо? Повторите последнюю команду без -n.