Если вы достаточно преданы, чтобы возиться с регулярными выражениями (в примере, который вам предоставлен), я предлагаю просто сделать шаг дальше и написать небольшой скрипт - скажем, в Python. Таким образом, вы сможете выполнять абсолютно любые преобразования в имена файлов.
Я бы оценил, что скрипт python будет длиннее 15-20 строк, поэтому это определенно не огромная задача.
Вот мой подход к такому сценарию:
#!/usr/bin/python
import os,re
files = os.listdir('.')
SEASONS = (
(1, 1, 3), # the format is - season number, first episode, last episode
(2, 50,52),
(3, 53,55),
(4, 56,99),
)
for f in files:
# skip all files which are not .mp4
if not f.endswith(".mp4"):
continue
# find the first number in the filename
matches = re.findall("\d+", f)
if not len(matches):
print "skipping", f
num = int(matches[0])
for season in SEASONS:
if num <= season[2]:
season_num = season[0]
ep_num = num - season[1] + 1
new_file_name = "BleachS%02dE%02d.mp4" % (season_num, ep_num)
# This is for testing
print "%s ==> %s" % (f, new_file_name)
# Uncomment the following when you're satisfied with the test runs
# os.rename(f, new_file_name)
break
print "Done"
Похоже, что я недооценил размер скрипта ( это 36 строк atm), хотя я уверен, что если вы перейдете к stackoverflow с помощью этого кода, вы получите много предложений, которые намного элегантнее
И только потому, что я сказал, что это можно сделать в 15 строках ... следующие 20 строк, из которых 5 - конфигурация: P
#!/usr/bin/python
import os, re, glob
SEASONS = (
{'num':1, 'first':1, 'last':3}, # the format is - season number, first episode, last episode
{'num':2, 'first':50, 'last':52},
{'num':3, 'first':53, 'last':55},
{'num':4, 'first':56, 'last':99},
)
files = glob.glob('bleach*.mp4')
for f in files:
num = int(re.findall("\d+", f)[0]) # find the first number in the filename
for season in SEASONS:
if num > season['last']: continue
new_file_name = "BleachS%02dE%02d.mp4" % (season['num'], num - season['first'] + 1)
print "%s ==> %s" % (f, new_file_name) # This is for testing
# os.rename(f, new_file_name) # Uncomment this when you're satisfied with the test runs
break
Вероятно, это проблема с Mono и, похоже, v4.4.1 или старше или зависит от нее только в некоторых версиях.
Попробуйте установить / обновить Mono с помощью следующей команды (Ubuntu 16.04), пожалуйста обратитесь к этой странице, чтобы установить ее в 17.04, или вам может потребоваться установить пакет Mono-runtime.
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF
echo "deb http://download.mono-project.com/repo/ubuntu xenial main" | sudo tee /etc/apt/sources.list.d/mono-official.list
sudo apt-get update
sudo apt-get install mono-devel
Или в более раннем Ubuntu, пожалуйста, следуйте на этой странице, чтобы установить в 17.04 .
Вам также может потребоваться выполнить третий шаг в инструкциях и выполнить проверку установки.
Если Mono работает нормально, тогда у вас не должно быть проблем с сбоем при использовании урожая в Pinta as
Последняя версия Mono: 5.2.0 Stable (5.2.0.215); Возможно, вам придется попробовать в разных версиях Mono, чтобы заставить его работать.
Вероятно, это проблема с Mono и, похоже, v4.4.1 или старше или зависит от нее только в некоторых версиях.
Попробуйте установить / обновить Mono с помощью следующей команды (Ubuntu 16.04), пожалуйста обратитесь к этой странице, чтобы установить ее в 17.04, или вам может потребоваться установить пакет Mono-runtime.
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF
echo "deb http://download.mono-project.com/repo/ubuntu xenial main" | sudo tee /etc/apt/sources.list.d/mono-official.list
sudo apt-get update
sudo apt-get install mono-devel
Или в более раннем Ubuntu, пожалуйста, следуйте на этой странице, чтобы установить в 17.04 .
Вам также может потребоваться выполнить третий шаг в инструкциях и выполнить проверку установки.
Если Mono работает нормально, тогда у вас не должно быть проблем с сбоем при использовании урожая в Pinta as
Последняя версия Mono: 5.2.0 Stable (5.2.0.215); Возможно, вам придется попробовать в разных версиях Mono, чтобы заставить его работать.