Como gravar arquivos em uma ordem específica?

3

Ok, aqui está um problema estranho - Minha esposa acabou de comprar um 2014 Nissan Altima. Então, peguei a biblioteca do iTunes dela 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. Assim, você acha que elas estão 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. > music.txt". Então eu passei este 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?

    
por Bernie 29.05.2014 / 04:15

3 respostas

2

Você fez duas perguntas, uma claramente indicada e outra apenas de maneira implícita:

  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. (Veja Problema XY )

Mas o bastante falado ... agora eu tento responder as duas perguntas:

  1. Sua abordagem rsync é quase a solução para a primeira pergunta, somente você usou o parâmetro -a . -a do Rsync é equivalente a -rlptgoD , o que inclui especialmente -t :

    man rsync (...)

    This tells rsync to transfer modification times along with the files and update them on the remote system.

    Definitivamente não é o que você quer. Conforme 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 , 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. Duvido que os arquivos sejam lidos na mesma ordem em que foram escritos , conforme declarado pelo técnico da Nissan, mas 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 pendrive USB está não montado e encontre o dispositivo correspondente (por exemplo, usando cat /proc/partitions ), digamos que ele é /dev/sdi1 . Então corra o fatsort:

    fatsort -cn /dev/sdi1
    

    Isso classifica as entradas de arquivo insensíveis a maiúsculas e na chamada ordem natural , que inclui ordem alfabética. 1)

    É muito rápido e você não precisa copiar todos os arquivos várias vezes, 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.

    
por 29.05.2014 / 10:14
0

Pode 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 "%"
    
por 29.05.2014 / 06:07
0

Você não poderia fazer algo assim?

copy files
for each file in music.txt
    touch destination file
    sleep 1
    
por 29.05.2014 / 07:28

Tags