У меня есть несколько файлов в каталоге более чем 200, которые я хотел бы переименовать путем удаления всех других символов включая символ и остальных после того, как это появляется дважды.
Пример:
Один из файлов в каталоге
Akouo - Float-H6hQuio26Ww.mp3
Я хотел бы сценарий удара, который удаляет второй дефис и все символы после него, исключая расширение.
Конечный результат должен быть
Akouo - Float.mp3
Для переименования примера
Akouo - Float-H6hQuio26Ww.mp3
к
Akouo - Float.mp3
использование
rename 's/-[^-]*\././' Akouo\ -\ Float-H6hQuio26Ww.mp3
, Если Вы хотите переименовать все .mp3 файлы в своем текущем каталоге с этой схемой используйте
rename 's/-[^-]*\././' *-*-*.mp3
, можно добавить опцию -n
для пробного прогона.
Если бы мы предполагаем, что все файлы имеют два или больше дефиса, и все файлы являются mp3, переименовывание (в Python) только проводило бы несколько строк:
hyps = [i for i in range(len(name)) if name[i] == "-"]
name = name[:hyps[1]]+"mp3"
Однако, по-моему, сценарий должен (без явной информации, что это не необходимо), берут по крайней мере во внимание возможность, что каталог имеет подкаталоги и/или содержит:
так, чтобы:
file1-2-3-4-5.txt
a-b-c-d-e
Akouo - Float-H6hQuio26Ww.mp3
становится:
file1-2.txt
a-b
Akouo - Float.mp3
Затем сценарий немного более обширен:
#!/usr/bin/env python3
import shutil
import os
sourcedir = "/path/to/files"
for root, dirs, files in os.walk(sourcedir):
for name in files:
if name.startswith(".") or name.count("-") < 2:
pass
else:
if name.count(".") == 0:
extension = ""
else:
extension = name[name.rfind("."):]
hyps = [i for i in range(len(name)) if name[i] == "-"]
newname = name[:hyps[1]].strip()+extension
shutil.move(root+"/"+name, root+"/"+newname)
Скопируйте сценарий в пустой файл, установите путь к Вашему каталогу и сохраните его как rename.py
. Выполните его командой:
python3 /path/to/rename.py