LINUX.ORG.RU

[Решено] Копировать m3u-плейлист вместе с файлами

 


0

1

Есть m3u-плейлист. Как копировать все упомянутые в нём файлы из одного каталога в другой? Конечная цель - перенести подборку записей на другое устройство.

★★★

Последнее исправление: damix9 (всего исправлений: 1)

Ответ на: комментарий от grem

Хорошо, что представились, капитан, но нет, я не вашего ответа хотел. Ну и наверняка же можно без консоли - мышкой два раза кликнуть. Хотя one-liner тоже устроит.

damix9 ★★★
() автор топика
Ответ на: комментарий от symon2014

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

Задача же тривиальная, наверняка есть готовое решение.

damix9 ★★★
() автор топика
Ответ на: комментарий от damix9

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

symon2014 ★★
()
Ответ на: комментарий от LINUX-ORG-RU

на свой страх и риск

local function m3u_transfer()
    local m3u_file , target_path = arg[1], arg[2];
    if not m3u_file or not target_path then
        error('usage ./script m3u_file target_directorry');
    end
    local m3u_file_data = io.open(m3u_file,'r');
    local line = m3u_file_data:read('*line');
    while(line) do
        if not line:find('#',1,true) then
        print(line)
        local pose = line:reverse():find('/',1,true);
        if not pose then return 0 end;
        local path = line:sub(1,#line-pose);
        pose = path:find('/',1,true);
        path = path:sub(pose,#path);
        local name = path:sub(#line-pose+2,#line)
        os.execute('mkdir -p '..target_path..'/'..path);
        os.execute('cp '..line..' '..target_path..'/'..path..'/'..name);
        end
        line = m3u_file_data:read('*line');
    end
    m3u_file_data:close();
end

m3u_transfer()

lua ./script.lua file.m3u target_dir

LINUX-ORG-RU ★★★★★
()
Ответ на: комментарий от d00fy

Лишняя r погоды не делает. А так, я написал и убегаю сверкая пятками. :D

перепиши лучше на шелле

Не, давай лучше ты, для разнообразия так сказать. А у меня кино начинается.

LINUX-ORG-RU ★★★★★
()
Последнее исправление: LINUX-ORG-RU (всего исправлений: 1)
Ответ на: комментарий от symon2014

Вы всё правильно поняли

В плейлисте список или ссылок на потоки или на локальные файлы , которые ты хочешь скопировать в другое место.

Да, в данном случае все файлы локальные.

damix9 ★★★
() автор топика
Ответ на: комментарий от unDEFER

Но лучше всего вам подойдёт GNU parallel. Так как xargs кажется не умеет запихнуть аргументы в середину команды.

unDEFER ★★★★★
()
Последнее исправление: unDEFER (всего исправлений: 1)
Ответ на: комментарий от symon2014

Может DeaDBeeF?

Ну да, предположительно, есть такая фича.

Вообще программа интересная, надо попробовать. Даже распространяется по-человечески - просто в виде архива со всеми необходимыми файлами.

https://deadbeef.sourceforge.io/portable.html

These are cross-distro builds for x86_64 systems. You should use them in the following cases:
    ...
    You want the official build, created and tested by developer, linked to carefully selected (working!) library versions, built with proper settings, not messed up by some ignorant package maintainer
Позабавило.

На правах оффтопа:

Зануды не захотели ее опакечивать:

There is an open RFP bug open for 0xdeadbeef since 2010 https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=576975 but no progress has been made since 2014.
Facepalm. Даже в сраном Альте есть, а в «самом лучшем дистрибутиве для новичков» нет.

damix9 ★★★
() автор топика
Ответ на: комментарий от pfg

Тоже задавался этим вопросом как и тс.

Сейчас ради интереса загуглил и сразу же нашел плагин для винампа с таким функционалом. Проверил - работает)

Виндовый софт рулит 👍

Zadoff386
()
Ответ на: комментарий от symon2014

Точно!

  1. Открыть плейлист
  2. Выделить все, ПКМ -> Конвертировать
  3. Поставить галку «Копировать, если формат не изменяется», кодировщик выбрать «File Copy»
  4. Либо нажать галку Сохранить структуру каталогов и выбрать имя выходного файла %filename%, либо отжать указанную галку и заполнить это поле %list_index% %title%
  5. Нажать Ок чтобы начать запись файлов.

Спасибо, это то что нужно!

damix9 ★★★
() автор топика
Ответ на: комментарий от damix9

формат m3u содержит не только имена файлов.

Серьезно? Давно? А что там ещё может содержаться?

Пути я так понимаю. Но у меня команда сделана из расчёта этого.

unDEFER ★★★★★
()
Последнее исправление: unDEFER (всего исправлений: 1)

Есть еще одна программка AudioM. Тоже работает. Еще и создает файл плейлиста в папке назначения, хотя и с абсолютными путями, имеет красивый и очень простой интерфейс. Но не умеет сохранять оригинальную структуру каталогов или как-то менять имена звуковых файлов.

damix9 ★★★
() автор топика
Ответ на: комментарий от Zadoff386

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

Линуксового софта хватает хорошего, просто он опакечен по-дурацки.

damix9 ★★★
() автор топика