Como escrever arquivos em ordem específica?


3

Ok, aqui está um problema estranho - Minha esposa acabou de comprar um 2014 Nissan Altima. Então, peguei sua biblioteca do iTunes e converti os arquivos .m4a para .mp3, já que o sistema de áudio do carro suporta apenas .mp3 e .wma. Por enquanto, tudo bem. Então eu copiei os arquivos para um drive USB formatado em DOS FAT-32, e conectei o drive à porta USB do carro, apenas para descobrir que todas as faixas estavam fora de seqüência. Todas as faixas começam com um prefixo numérico de dois dígitos, ou seja, 01, 02, 03, etc. Então, você pensaria que elas estariam em ordem. Então liguei para o suporte do Nissan Connect e o representante me disse que há um problema conhecido com a leitura de arquivos na ordem correta. Ele disse que os arquivos são lidos na mesma ordem em que são escritos. Então, eu copiei manualmente alguns álbuns com as faixas em uma ordem pré-determinada, e com certeza ele estava correto.

Então eu copiei cerca de 6 álbuns para testes, então mudei para o diretório de nível superior e fiz um "find. & Gt; music.txt". Então passei esse arquivo para o rsync assim:

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

Os arquivos pareciam ter sido copiados em ordem, mas quando eu listei os arquivos na ordem do tempo modificado, eles estavam na mesma sequência dos arquivos originais:

../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

Portanto, a questão é: como posso copiar arquivos listados em um arquivo chamado music.txt e copiá-los para um destino e garantir que os horários de modificação estejam na mesma sequência em que os arquivos estão listados?

Respostas:


2

Você fez duas perguntas, uma claramente indicada e outra apenas implicitamente:

  1. Como posso copiar arquivos listados em um arquivo chamado music.txt e copiá-los para um destino e garantir que os horários de modificação estejam na mesma sequência em que os arquivos estão listados?

  2. Como posso conseguir que meu MP3 player leia os arquivos em ordem alfabética de um dispositivo USB (formatado com sistema de arquivos FAT)?

Mas IMHO o segundo é o seu verdadeiro. Eu acho que o cara da Nissan mandou você para o caminho errado. (Vejo Problema XY )

Mas o suficiente tagarelou ... agora eu tento responder as duas perguntas:

  1. Seu rsync abordagem é quase a solução para a primeira questão, você usou o -a parâmetro. Rsync's -a é equivalente a -rlptgoD, que inclui especialmente -t:

    homem rsync (...)

    Isso diz ao rsync para transferir os tempos de modificação junto com os arquivos e atualizá-los no sistema remoto.

    Definitivamente não é o que você quer. Quando você copia para um sistema de arquivos FAT (que não suporta proprietário, grupos, permissão, links, etc.) não vejo nenhuma boa razão para a maioria das outras opções fornecidas por -a de todo, então tente

    rsync -rv --files-from=music.txt . ../Marys\ Music\ Sequenced/
    
  2. Para que seus arquivos MP3 sejam lidos em ordem alfabética, sugiro outra abordagem. eu duvido disso os arquivos são lidos na mesma ordem em que são escritos como afirmado pelo técnico da Nissan, mas sim na ordem em que estão listados na tabela de alocação de arquivos . E exatamente para reorganizar essa ordem há uma ferramenta legal, chamada fatsort .

    Primeiro, verifique se o seu pen drive USB não montado e encontrar o dispositivo correspondente (por exemplo, cat /proc/partitions ), digamos que seja /dev/sdi1. Então execute fatsort:

    fatsort -cn /dev/sdi1
    

    Isso classifica as entradas do arquivo insensível a maiúsculas e nos chamados ordem natural , que inclui ordem alfabética. 1)

    É muito rápido e você não precisa copiar todos os arquivos repetidamente, se você adicionar apenas um outro arquivo.


1) Eu não posso testar o comando agora, mas se bem me lembro, -n é o que você quer. Se não, por favor consulte a ajuda ( fatsort -h ) você mesmo.


0

Poderia ser feito com xargs:

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

Uma alternativa seria fazer algo assim (assumindo que tudo é sequencial):

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

0

Você não poderia fazer algo assim?

copy files
for each file in music.txt
    touch destination file
    sleep 1
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.