3

Хорошо, вот странная проблема - моя жена только что купила Nissan Altima 2014 года. Итак, я взял ее библиотеку iTunes и преобразовал файлы .m4a в .mp3, поскольку автомобильная аудиосистема поддерживает только .mp3 и .wma. Все идет нормально. Затем я скопировал файлы на флэш-накопитель USB в формате DOS FAT-32 и подключил диск к USB-порту автомобиля, но обнаружил, что все дорожки не соответствуют друг другу. Все дорожки начинаются с двухзначного числового префикса, т. Е. 01, 02, 03 и т.д. Таким образом, вы думаете, что они будут в порядке. Поэтому я позвонил в службу поддержки Nissan Connect, и представитель сказал мне, что существует известная проблема с чтением файлов в правильном порядке. Он сказал, что файлы читаются в том же порядке, в котором они написаны. Итак, я вручную скопировал несколько альбомов с треками в заданном порядке, и, конечно же, он был прав.

Поэтому я скопировал около 6 альбомов для тестирования, затем перешел в каталог верхнего уровня и сделал «find.> Music.txt». Затем я передал этот файл в rsync следующим образом:

rsync -av --files-from=music.txt . ../Marys\ Music\ Sequenced/

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

../Marys Music Sequenced/Air Supply/Air Supply Greatest Hits> ls -1rt
01 Lost In Love.mp3
04 Every Woman In The World.mp3
03 Chances.mp3
02 All Out Of Love.mp3
06 Here I Am (Just When I Thought I Was Over You).mp3
05 The One That You Love.mp3
08 I Want To Give It All.mp3
07 Sweet Dreams.mp3
11 Young Love.mp3

Таким образом, вопрос заключается в том, как я могу скопировать файлы, перечисленные в файле с именем music.txt, и скопировать их в место назначения, и убедиться, что время модификации соответствует последовательности файлов?

3 ответа3

2

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

  1. Как я могу скопировать файлы, перечисленные в файле с именем music.txt, и скопировать их в место назначения, и убедиться, что время модификации соответствует последовательности файлов?

  2. Как мне добиться, чтобы мой MP3-плеер считывал файлы в алфавитном порядке с USB-накопителя (отформатированного в файловой системе FAT)?

Но ИМХО второй твой настоящий. Я думаю, парень из Nissan отправил вас не на тот путь. (См. XY Проблема)

Но хватит болтовни ... сейчас я попытаюсь ответить на оба вопроса:

  1. Ваш подход rsync является почти решением первого вопроса, только вы использовали параметр -a . Rsync -a эквивалентно -rlptgoD , что особенно включает в себя -t:

    человек rsync (...)

    Это говорит rsync передавать время модификации вместе с файлами и обновлять их в удаленной системе.

    Определенно не то, что вы хотите. При копировании в файловую систему FAT (которая не поддерживает ни владельца, ни группы, ни разрешения, ни ссылки и т.д.) Я не вижу веских причин для большинства других опций, предоставляемых -a , поэтому попробуйте

    rsync -rv --files-from=music.txt . ../Marys\ Music\ Sequenced/
    
  2. Чтобы ваши MP3-файлы читались в алфавитном порядке, я предлагаю другой подход. Я сомневаюсь, что файлы читаются в том же порядке, в котором они записаны, как указано техническим специалистом Nissan, но вместо этого в том порядке, в котором они перечислены в таблице размещения файлов . И именно для того, чтобы изменить порядок, есть аккуратный инструмент, называемый fatsort .

    Во-первых, убедитесь, что ваш USB-накопитель не подключен, и найдите соответствующее устройство (например, используя cat /proc/partitions), допустим, что это /dev/sdi1 . Затем запустите fatsort:

    fatsort -cn /dev/sdi1
    

    Это сортирует записи файлов без учета регистра и в так называемом естественном порядке , который включает алфавитный порядок. 1)

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


1) Я не могу проверить команду прямо сейчас, но если я правильно помню, -n это то, что вы хотите. Если нет, пожалуйста, обратитесь к справке (fatsort -h) самостоятельно.

0

Можно сделать с помощью xargs:

cat music.txt | xargs -I% rsync -av "./%" "../Marys\ Music\ Sequenced/%"

Альтернативой было бы сделать что-то вроде этого (при условии, что все последовательно):

ls "../Marys\ Music\ Sequenced/" | xargs -I% touch "%"
0

Не могли бы вы сделать что-то подобное?

copy files
for each file in music.txt
    touch destination file
    sleep 1

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .