Batch mc cronjob deixando algumas (não todas) cópias na origem

2

Eu tenho um cronjob que é executado a cada 5 minutos, procurando por wavs e mp3s de mesmo nome em um diretório de origem e, se encontrar um par correspondente, ele se move para um diretório de destino.

O script está funcionando muito bem, tanto quanto eu posso dizer, no entanto, alguns MP3s estão sendo deixados no diretório de origem, bem como aparecem no destino. Ambas as cópias estão cheias.

O diretório fonte também é a saída de outro processo que gera wavs e mp3s, e eu testei enquanto escrevia o script para ter certeza de que ele não pegaria os arquivos antes que eles tivessem sido escritos completamente. Parece que ele contém o wav progressivamente escrito em um local temporário até que esteja completo, no ponto em que o move para o diretório. Então a saída parece completa em um único instante. Os wavs, no entanto, são escritos progressivamente. Fiquei com a impressão de que os mp3s são escritos antes do wav, caso em que o script funcionaria bem, já que não continuaria até que tanto wav quanto mp3 estivessem presentes.

[edit: o processo é o seguinte.

  1. A máquina de áudio processa arquivos de áudio e reproduz um wav e um mp3 correspondente (com o mesmo nome).
  2. Estas terras em $ INPUT, embora eu não possa ter certeza da ordem relativa em que aparecem.
  3. Meu script (abaixo) encontra wav e mp3, gera um hashsum para o wav e move ambos para o $ OUTPUT. ]

É possível - se alguns mp3s estão sendo escritos após o wav (inteiramente possível e imprevisível com nosso software de áudio) - que o comando mv está pegando ainda não totalmente escritos mp3s, soltando-os no destino, mas continuando a atualizá-los?

Estou confuso sobre o motivo de as cópias de origem e de destino estarem completas.

Aqui está a parte relevante do meu script:

cd "$INPUT"
for x in *.wav
do if [ ! -e $x ]                   
then exit 0
else if [ -e ${x%.wav}.mp3 ]                
    then    md5sum $x > "$MD5DIR"/$x.md5 &&     
            mv $x "$OUTPUT" &&          
            mv ${x%.wav}.mp3 "$OUTPUT"      
    fi
fi

Resultado (por exemplo):

$ ls $INPUT/
1.mp3
4.mp3

$ ls $OUTPUT/
1.wav    1.mp3
2.wav    2.mp3
3.wav    3.mp3
4.wav    4.mp3

[Editar 2014-03-12:

Eu acho que sei o que está acontecendo.

O processo anterior que produziu os arquivos wavs e mp3 parece gravar as tags de metadados id3 por último, depois de ter escrito todo o conteúdo de áudio do arquivo MP3. Meu roteiro, presumivelmente, levou o MP3 depois que o conteúdo de áudio foi escrito, mas antes das tags ID3 terem sido gravadas. Comparar os arquivos em um editor de áudio não mostra diferença, mas comparar suas tags id3 mostra que apenas as cópias deixadas no diretório de entrada tinham tags completas.

Não vejo nenhuma maneira de contornar isso, mas descobri que a máquina de processamento de áudio também produz um arquivo de log de resultados para cada arquivo de áudio produzido. Então, como uma solução alternativa, a presença desse arquivo de resultados agora é o gatilho para o meu script ser executado.

]

    
por Jangari 07.03.2014 / 01:03

0 respostas

Tags