Fogger можно установить с помощью репозитория Launchpad ppa: loneowais / fogger
sudo add-apt-repository ppa:loneowais/fogger
sudo apt-get update
sudo apt-get install fogger
Если вы достаточно преданы, чтобы возиться с регулярными выражениями (в примере, который вам предоставлен), я предлагаю просто сделать шаг дальше и написать небольшой скрипт - скажем, в 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
Если вы достаточно преданы, чтобы возиться с регулярными выражениями (в примере, который вам предоставлен), я предлагаю просто пойти на один шаг дальше и написать небольшой скрипт - скажем, в 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
Если вы достаточно преданы, чтобы возиться с регулярными выражениями (в примере, который вам предоставлен), я предлагаю просто пойти на один шаг дальше и написать небольшой скрипт - скажем, в 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
Если вы достаточно преданы, чтобы возиться с регулярными выражениями (в примере, который вам предоставлен), я предлагаю просто пойти на один шаг дальше и написать небольшой скрипт - скажем, в 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
Я написал вам скрипт python
import sys
import os
import glob
import re
def rename():
episode_counts = (0, 20, 41, 63)
episode_pairs = []
for index, num in enumerate(episode_counts):
if index < len(episode_counts) - 1:
episode_pairs.append((num, episode_counts[index+1]))
episodes = glob.glob(os.path.join(sys.argv[1], '*'))
for episode in episodes:
match = re.search('.*(\d{2}).*$', os.path.basename(episode))
episode_num = match.group(1)
for season, pair in enumerate(episode_pairs):
if int(episode_num) in range(pair[0]+1, pair[1]+1):
dirname = os.path.dirname(episode)
path = os.path.join(dirname, 'Bleach S{0}E{1}'.format(season+1, episode_num))
os.rename(episode, path)
if __name__ == "__main__":
rename()
Я действительно новичок в python (отчасти поэтому я написал это для практики), поэтому, вероятно, это не лучший скрипт в мире. Но я попробовал это на нескольких тестовых файлах и, похоже, сработал.
Просто отредактируйте линию рядом с верхней частью episode_counts = ... до последних номеров эпизодов в течение сезона.
Сохраните код как что-то вроде episode_renamer.py и используйте его с python episode_renamer.py /path/to/episodes/.
В репозитории имеется файловый менеджер Thunar, который имеет опцию переименования большого объема.
См. этот сайт для получения дополнительной информации: http://thunar.xfce.org/pwiki/documentation/bulk_renamer
Вы можете установить thunar в Центр программного обеспечения или в командной строке с помощью :
sudo apt-get install thunar
Существуют другие способы сделать это в bash или написанием некоторого кода, но графический инструмент, вероятно, поможет вам быстрее, чем вы.
Я разрабатываю кросс-платформенное настольное приложение, которое позволяет переименовывать набор файлов из указанного шаблона в другой. Пользователь может указать оба шаблона.
Вы можете скачать его по этой ссылке (это называется file-renamer-swt). И вот главный сайт проекта.
Чтобы продолжить порку этой лошади ... если это одноразовое переименование, я бы сделал что-то одноразовое:
cd /path/to/stuff
ls bleach*-lq.mp4 >x
paste x x >y
sed 's-^-mv -' <y >z
vim z # or use your favorite editor
# to rename the files manually
bash -x z
rm x y z
Если вы будете использовать его более одного раза и более один вид эпизода ... тогда питон - это путь, и приведенные выше примеры просто прекрасны.
Я разрабатываю кросс-платформенное настольное приложение, которое позволяет переименовывать набор файлов из указанного шаблона в другой. Пользователь может указать оба шаблона.
Вы можете загрузить его из этой ссылки (он называется: file-renamer-swt). И вот главный сайт проекта .
Чтобы продолжить порку этой лошади ... если это одноразовое переименование, я бы сделал что-то одноразовое:
cd /path/to/stuff
ls bleach*-lq.mp4 >x
paste x x >y
sed 's-^-mv -' <y >z
vim z # or use your favorite editor
# to rename the files manually
bash -x z
rm x y z
Если вы будете использовать его более одного раза и более, чем один вид эпизода ... тогда питон - это путь, и примеры, приведенные выше, просто прекрасны.
Я разрабатываю кросс-платформенное настольное приложение, которое позволяет переименовывать набор файлов из указанного шаблона в другой. Пользователь может указать оба шаблона.
Вы можете загрузить его из этой ссылки (он называется: file-renamer-swt). И вот главный сайт проекта .
Я написал вам скрипт python
import sys
import os
import glob
import re
def rename():
episode_counts = (0, 20, 41, 63)
episode_pairs = []
for index, num in enumerate(episode_counts):
if index < len(episode_counts) - 1:
episode_pairs.append((num, episode_counts[index+1]))
episodes = glob.glob(os.path.join(sys.argv[1], '*'))
for episode in episodes:
match = re.search('.*(\d{2}).*$', os.path.basename(episode))
episode_num = match.group(1)
for season, pair in enumerate(episode_pairs):
if int(episode_num) in range(pair[0]+1, pair[1]+1):
dirname = os.path.dirname(episode)
path = os.path.join(dirname, 'Bleach S{0}E{1}'.format(season+1, episode_num))
os.rename(episode, path)
if __name__ == "__main__":
rename()
Я действительно новичок в python (отчасти поэтому я написал это для практики), поэтому, вероятно, это не лучший скрипт в мире. Но я попробовал это на нескольких тестовых файлах и, похоже, сработал.
Просто отредактируйте линию рядом с верхней частью episode_counts = ...
до последних номеров эпизодов в течение сезона. Я поставил первые три из этой страницы.
Сохраните код как что-то вроде episode_renamer.py
и используйте его с python episode_renamer.py /path/to/episodes/
.
Чтобы продолжить порку этой лошади ... если это одноразовое переименование, я бы сделал что-то одноразовое:
cd /path/to/stuff
ls bleach*-lq.mp4 >x
paste x x >y
sed 's-^-mv -' <y >z
vim z # or use your favorite editor
# to rename the files manually
bash -x z
rm x y z
Если вы будете использовать его более одного раза и более, чем один вид эпизода ... тогда питон - это путь, и примеры, приведенные выше, просто прекрасны.