У меня есть несколько файлов в каталоге более 200, который я бы хотел переименовать, удалив все остальные символы, включая символ, а остальные после его появления дважды.
Пример:
Один из файлов в каталоге:
Akouo - Float-H6hQuio26Ww.mp3
Мне нужен сценарий bash, который удаляет второй дефис и все символы после него, кроме расширения.
Конечный результат должен быть
Akouo - Float.mp3
Если мы предполагаем, что все файлы имеют два или более подменю, а все файлы - это mp3, переименование (в python) будет занимать всего несколько строк:
hyps = [i for i in range(len(name)) if name[i] == "-"]
name = name[:hyps[1]]+"mp3"
Однако, на мой взгляд, сценарий должен (без явной информации, что это необязательно), по крайней мере, учитывать возможность того, что каталог имеет подкаталоги и / или содержит:
файлы скрытых файлов без файлов расширения с различными типами имен файлов расширений имеют только один, более двух или вообще нет hypens, так что:
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