renomeia ou move em close_write?

0

Eu tenho me deixado louco tentando descobrir isso.

inotifywait -m -r -e close_write --format '%?' folder

Como posso pegar o arquivo específico que aciona esse evento e renomeá-lo e movê-lo ou movê-lo e renomeá-lo? Ao renomear, quero dizer substituir os espaços em branco por caracteres não alfanuméricos, como sublinhados, travessões, etc. A alternativa aceitável seria acrescentar ou acrescentar o nome do arquivo com um identificador exclusivo para o meu propósito, para que eu possa classificá-los em específico pastas após o processamento. Especificamente filmes acabarão na pasta de filmes, etc.

Eu tenho todo o aspecto de processamento disso funcionando, mas não possuo as habilidades necessárias para atingir meu objetivo.

Não precisa ser inotifywait , estou aberto a praticamente qualquer coisa (exceto o Windows) que eu possa alcançar com algum script de shell.

Pode fazer uma pesquisa por um arquivo que foi modificado pela última vez n segundos atrás? Em caso afirmativo, verifique o mesmo arquivo após um sono de 30 segundos para garantir que ele não tenha sido alterado e, em seguida, aja de acordo com ele? Eu preciso de uma maneira de separar os arquivos concluídos dos arquivos que não terminaram o download.

Eu ficaria grato por qualquer ajuda.

    
por Terry 29.07.2017 / 00:47

2 respostas

0

Bem, como a questão do tempo não era crítica, eu defini tudo como um cron job procurando arquivos que foram modificados MAIS de um minuto antes mmin +1 , de hora em hora e quando eu verifiquei meus arquivos tinham não foi movido e meu terminal tinha uma mensagem "não há arquivo ou diretório" nele. Eu acho que rename não recorre.

Algumas horas atrás, o Google me levou a esta página: Encontre o arquivo, em seguida, cd para esse diretório no Linux .

Agora começando na minha nova pasta de vídeos

cd -- "$(find ./ -name "*S0*" -type f -printf '%h' -quit)"
find ./ -type f -mmin +1 -exec rename 's/\ /\%/g' {} \;
mv -t /home/terry/Video_Processing/staging "*%*"

A configuração no cron move todos os arquivos concluídos para a área de preparação, deixando o download ainda para o próximo passo.

    
por 29.07.2017 / 12:01
0

Depois de uma pausa muito necessária, decidi dar outro giro no meu plano original de usar inotifywait para acionar o processo renomear / mover / converter. Era dolorosamente óbvio que o arquivo tinha que ter sido criado MAIS de 60 segundos antes para mmin pegar o (s) arquivo (s), então primeiro o gatilho, seguido por um segundo de 61 segundos antes de iniciar a renomeação.

Estou usando iwatch , pois permite recursividade. Contanto que os arquivos sejam nomeados na moda titleS0xExx.ext , com os dígitos 0-9 substituindo os x, parece funcionar bem. Aqui está a parte relevante da única parte em que a recursão é necessária.

watch=/home/terry/New_Video/TV_Show
events=close_write,move_to
excluded=
recursive=false
autoadd=false
command=cd /home/terry/New_Video/TV_Shows
command=sleep 61
command=cd -- "$(find ./ -name "S0" -type f -printf '%h' -quit)"
command=find ./ -type f -mmin +1 -exec rename 's/\ /\%/g' {} \;
command=mv -t /home/terry/Video_Processing/staging *%*
command=find /home/terry/New_Video/TV_Shows -empty -type d -delete

Os filmes e outras pastas também precisam do sono de 61 segundos.

O atraso não é um problema neste caso. Não é uma solução perfeita, mas é o mais próximo que "maldição" é palavrões.

Por algum motivo, não removeu a pasta vazia, portanto, talvez seja necessário fazer alguns ajustes.

    
por 29.07.2017 / 21:40