Como remover o histórico da linha de comando de um período de tempo específico?

3

Como posso remover o histórico da linha de comando ao longo de um período de tempo específico?

É possível fazer isso com apenas um comando?

    
por TellMeWhy 12.12.2015 / 21:46

1 resposta

3

Embora seja possível armazenar a hora em que um comando foi executado, os comandos de manipulação de histórico não usam o tempo como referência. Consulte HISTTIMEFORMAT em man bash :

HISTTIMEFORMAT
      If  this  variable  is  set and not null, its value is used as a
      format string for strftime(3) to print the time stamp associated
      with  each  history  entry displayed by the history builtin.  If
      this variable is set, time stamps are  written  to  the  history
      file  so they may be preserved across shell sessions.  This uses
      the history comment character  to  distinguish  timestamps  from
      other history lines.

Se você tivesse definido HISTTIMEFORMAT antes de executar os comandos que queria excluir, seu .bash_history teria linhas assim:

$ tail -4 ~/.bash_history 
#1449955320
history
#1449955329
history -w

Depois, você pode aproveitar os timestamps do Unix para excluí-los, usando awk , por exemplo:

awk -F# -v end=$(date -d yesterday +%s) \
  -v start=$(date -d 'now - 3 days' +%s) \
  ' < start ||  > end {print; getline; print}'

Não tenho certeza de como esse comando funcionará com comandos de várias linhas, mas talvez você possa contar os timestamps para obter o número atribuído a um comando e usar history para excluí-lo.

Se você não tiver definido HISTTIMEFORMAT antes, terá que fazer isso manualmente.

    
por muru 12.12.2015 / 22:29