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

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

Пример:

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

Akouo - Float-H6hQuio26Ww.mp3

Мне нужен сценарий bash, который удаляет второй дефис и все символы после него, кроме расширения.

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

Akouo - Float.mp3
1
задан 27 October 2014 в 18:56

1 ответ

Если мы предполагаем, что все файлы имеют два или более подменю, а все файлы - это 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
1
ответ дан 24 May 2018 в 02:25
  • 1
    Удивительный @ Джакоб. Спасибо за этот ответ и проработку. – user 27 October 2014 в 23:13
  • 2
    Удивительный @ Джакоб. Спасибо за этот ответ и проработку. – user 27 October 2014 в 23:13
  • 3
    Удивительный @ Джакоб. Спасибо за этот ответ и проработку. – user 27 October 2014 в 23:13
  • 4
    Удивительный @ Джакоб. Спасибо за этот ответ и проработку. – user 27 October 2014 в 23:13
  • 5
    Удивительный @ Джакоб. Спасибо за этот ответ и проработку. – user 27 October 2014 в 23:13
  • 6
    Удивительный @ Джакоб. Спасибо за этот ответ и проработку. – user 27 October 2014 в 23:13

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

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