Edite a saída inotifywait no modo daemon

2

Eu tenho feito progresso, mas não sei como proceder daqui. Estou usando inotifywait com a opção -d (daemon) para gerar um arquivo que lista os arquivos de vídeo que são colocados na pasta monitorada.

A lista é desejada porque ajustar os níveis de volume e a codificação é muito demorada e não quero perder nenhum evento. Meu problema está em como manipular os dados em algo que eu possa usar em um script zsh . As linhas individuais usam o seguinte formato

/path/to/file containing/white spaces/ CLOSE_WRITE,CLOSE file name with white spaces

O que eu preciso é

/path/to/file\ containing/white\ spaces/filename\ with\ white\ spaces.extension

O caminho muda, assim como o número de níveis de subpastas, assim como os nomes dos arquivos. O que é consistente é ** CLOSE_WRITE,CLOSE ** (um espaço em branco precedendo e um seguindo) e se alguém tiver a gentileza de me instruir sobre como remover essa parte da linha em um script zsh eu acho (espero, na verdade) que eu conheço o suficiente para que eu possa preceder os espaços em branco restantes com barras invertidas e remover a linha depois que ela não for mais necessária usando Vim da linha de comando com um fragmento que deparei.

Eu tenho mais do que eu preciso, na verdade eu escrevi scripts que funcionam por horas convertendo automaticamente arquivos OR ajustando os níveis de volume, eu só preciso disso para juntar tudo (eu Até mesmo ter um plano para verificar arquivos não convertidos na inicialização - descobrir como criar um arquivo atômico / bloqueio de pasta, criar uma nova sessão tmux para que eu possa fazer logout, mas deixar meu computador em execução - pelo menos até eu reparar minha área de trabalho e talvez até aprenda a usar paralelamente, mas isso tudo vem depois)

Qualquer e toda ajuda é muito apreciada.

    
por Terry 19.04.2017 / 18:09

2 respostas

0

Você pode usar a opção --format para inotifywait para alterar o formato de saída. Isso apenas imprimiria os nomes dos arquivos quando os arquivos fossem fechados, e não o tipo de evento:

inotifywait -eclose_write -m --format "%w%f" -q /path/to/target/dir

Ele não parece oferecer suporte a escapes no estilo C ( %code% ) e insiste em imprimir uma nova linha no final de cada evento, portanto, espero que você não tenha nomes de arquivo com novas linhas neles.

    
por 19.04.2017 / 19:14
0

De man parallel :

EXAMPLE: GNU Parallel as dir processor

If you have a dir in which users drop files that needs to be processed you can do this on GNU/Linux (If you know what inotifywait is called on other platforms file a bug report):

inotifywait -qmre MOVED_TO -e CLOSE_WRITE --format %w%f my_dir |\
      parallel -u echo

This will run the command echo on each file put into my_dir or subdirs of my_dir.

You can of course use -S to distribute the jobs to remote computers:

inotifywait -qmre MOVED_TO -e CLOSE_WRITE --format %w%f my_dir |\
      parallel -S ..  -u echo

Parece muito próximo do que você espera fazer.

Para aprender o GNU Parallel, siga o "Guia do Leitor" no início do "man parallel".

    
por 22.04.2017 / 06:49