Как я могу удалить все символы после того, как определенный символ появится дважды Используя сценарии Bash?

У меня есть несколько файлов в каталоге более чем 200, которые я хотел бы переименовать путем удаления всех других символов включая символ и остальных после того, как это появляется дважды.

Пример:

Один из файлов в каталоге

Akouo - Float-H6hQuio26Ww.mp3

Я хотел бы сценарий удара, который удаляет второй дефис и все символы после него, исключая расширение.

Конечный результат должен быть

Akouo - Float.mp3
0
задан 27 October 2014 в 17:56

2 ответа

Для переименования примера

Akouo - Float-H6hQuio26Ww.mp3

к

Akouo - Float.mp3

использование

rename 's/-[^-]*\././' Akouo\ -\ Float-H6hQuio26Ww.mp3

, Если Вы хотите переименовать все .mp3 файлы в своем текущем каталоге с этой схемой используйте

rename 's/-[^-]*\././' *-*-*.mp3

, можно добавить опцию -n для пробного прогона.

1
ответ дан 6 October 2019 в 22:09

Если бы мы предполагаем, что все файлы имеют два или больше дефиса, и все файлы являются 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
1
ответ дан 6 October 2019 в 22:09

Другие вопросы по тегам:

Похожие вопросы: