Переименуйте музыкальные файлы, чтобы они в алфавитном порядке следовали списку воспроизведения

У меня есть несколько mp3, которые я организовал в плейлист для вечеринки. Я хотел бы легко переименовать эти файлы, чтобы они начинались с позиции в списке воспроизведения:

001.Track.mp3
002.Track.mp3
.
.
.

Затем они могут просто воспроизводиться в алфавитном порядке. Это возможно, не делая это вручную?

2
задан 28 June 2013 в 19:30

3 ответа

Вы можете попробовать что-то вроде этого: я не уверен, что нужно что-то большее, но это должно сработать.

    cat playlist.m3u | I=1 while read file; do
        mv $file $I.$file.mp3;
        I=$I + 1;
    done;

Редактировать: Вам может понадобиться I = `expr $ I + 1 '; вместо I = $ I + 1;

0
ответ дан 28 June 2013 в 19:30

Я использую Dolphin, замену Nautilus, и все, что мне нужно сделать, это выбрать файлы, которые я хотел бы переименовать, щелкнуть правой кнопкой мыши на выделении и ...

enter image description here

Надеюсь, это поможет

0
ответ дан 28 June 2013 в 19:30

Принятие Вас имеет файл my_playlist.txt это содержит дорожки в порядке, Вы хотите играть их, например,

dancing all night long.mp3
charles trenet - je t'aime mon amour.mp3
mon petit poney - bo.mp3
charlie parker - donna lee.flac

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

Затем (наблюдают хорошую практику , которая будет работать с именами файлов, которые имеют пробелы в них):

#!/bin/bash

pl=my_playlist.txt

# need number of files, to know the number of leading zeros
n=$(wc -l < "$pl")
lz=0
while ((n)); do ((++lz)); ((n/=10)); done

i=1
while read f; do
    [[ -z $f ]] && continue
    if [[ ! -f $f ]]; then
        printf "*** Error, file \`%s' not found.\n" "$f"
        continue
    fi
    printf -v target "%0*d.%s" "$lz" "$i" "$f"
    echo mv -vn -- "$f" "$target"
    ((++i))
done < "$pl"

При выполнении его, как, переименовывание будет не происходить, из-за echo перед mv. Это - просто немного теста. Когда Вы довольны им, удаляете echo и переименовывание произойдет. mv команда имеет два флага -v и -n:

  • -v: будьте подробными (мне нравится знать то, что происходит),
  • -n: нет ударьте, чтобы не перезаписать в других отношениях существующие (более безопасные) файлы

Отметьте о printf команда. Это выглядит немного ужасным, но нет ничего, чтобы бояться о. Часть %0*d возьмет эти два аргумента $lz и $i и будет заменен числом $i с $lz начальные нули. Затем %s будет заменен третьим аргументом, который является именем файла. Все это будет помещено в переменную target, благодаря -v опция. Так, чтобы target будет что-то как:

0001.title of the file.mp3

Адаптируйтесь и расширитесь на свои потребности!


Теперь давайте предположим, что Вы играли с этим, и Вы хотите отменить переименование... существует две возможности:

  1. У Вас только есть файлы формы XXXX.YYYY где XXXX цифры, и требуется удалить цифры и период с имени:

    shopt -s extglob
    for i in +([[:digit:]]).*; do
        target=${i#*.}
        echo mv -nv -- "$i" "$target"
    done
    

    и удалите echo когда Вы счастливы.

  2. Вы только хотите сделать это для файлов в Вашем плей-листе my_playlist.txt:

    shopt -s extglob
    while read f; do
        a=( +([[:digit:]])."$f" )
        if ((${#a[@]}==0)); then
            printf "*** Error: can't find a match for file \`%s'\n" "$f"
        elif ((${#a[@]}>1)); then
            printf "*** Error: found several matches for file \`%s':\n" "$f"
            printf "    %s\n" "${a[@]}"
        else
            target=${a[0]#*.}
            echo mv -nv -- "$f" "$target"
        fi
    done < my_playlist.txt
    

    и как обычно, удалить echo когда Вы счастливы.

2
ответ дан 28 June 2013 в 19:30

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

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