Remover trabalhos de na fila em uma data especificada

3

Eu tenho uma série de trabalhos pendentes na fila,

$ atq
8   Mon Oct 29 13:21:00 2018
5   Mon Oct 29 10:36:00 2018
15  Mon Oct 29 13:31:00 2018
4   Mon Oct 29 10:35:00 2018
18  Mon Oct 29 15:55:00 2018
3   Mon Oct 29 10:31:00 2018
16  Mon Oct 29 15:54:00 2018
11  Mon Oct 29 13:24:00 2018
12  Mon Oct 29 13:24:00 2018
17  Mon Oct 29 15:53:00 2018
10  Mon Oct 29 13:23:00 2018
19  Tue Oct 30 15:43:00 2018
2   Mon Oct 29 07:41:00 2018
6   Mon Oct 29 10:41:00 2018
7   Mon Oct 29 13:20:00 2018
9   Mon Oct 29 13:22:00 2018

e planeja removê-los do trabalho em 29 de outubro. Felizmente, o ATR pode remover vários trabalhos

atrm 8 5 15 4 

apesar disso, uma iteração pode ser uma solução melhor,

$ atq | grep "Oct 29"
18  Mon Oct 29 15:55:00 2018
3   Mon Oct 29 10:31:00 2018
16  Mon Oct 29 15:54:00 2018
11  Mon Oct 29 13:24:00 2018
12  Mon Oct 29 13:24:00 2018
17  Mon Oct 29 15:53:00 2018
10  Mon Oct 29 13:23:00 2018
2   Mon Oct 29 07:41:00 2018
6   Mon Oct 29 10:41:00 2018
7   Mon Oct 29 13:20:00 2018
9   Mon Oct 29 13:22:00 2018

Como eu poderia selecionar o primeiro campo do número do trabalho para iterá-los?

    
por avirate 30.10.2018 / 09:34

2 respostas

3

Você pode canalizar a saída atq e processá-la um pouco:

atrm $( atq | grep 'Oct 29' | cut -d' ' -f 1 | tr '\n' ' ' )

O que está sendo feito:

  • grep Oct 29 de atq output
  • selecione os primeiros campos usando apenas cut e assumindo um espaço como separador
  • crie novas linhas para espaços usando tr

Isso fornece apenas os números de trabalho de at em uma única linha, que pode ser sua entrada para atrm .

Preveja a seleção listando os IDs do trabalho apenas usando apenas

 atq | grep 'Oct 29' | cut -d' ' -f 1 | tr '\n' ' '
    
por 30.10.2018 / 09:43
5
atq | awk '/Oct 29/ { print $1 }'

Isso imprimiria os IDs das tarefas que continham a string Oct 29 .

O que o código awk está fazendo é corresponder a expressão regular dada a cada uma das linhas de entrada e, para as linhas correspondentes, imprimir o primeiro campo delimitado por espaço em branco na linha (o ID do trabalho).

Passar o resultado desse pipeline curto para xargs atrm removeria os trabalhos:

atq | awk '/Oct 29/ { print $1 }' | xargs atrm

O utilitário xargs lê seu fluxo de entrada padrão e executa o utilitário fornecido com o argumento lido. Se houver muitos argumentos (provavelmente não neste caso), xargs pode executar o utilitário várias vezes.

    
por 30.10.2018 / 09:40

Tags