Estou usando slapadd
para restaurar um backup. Esse backup contém 45k entradas, o que demora um pouco para ser restaurado, portanto, preciso atualizar o progresso de slapadd
. Felizmente para mim existe a opção -v
que dá uma saída similar a esta:
added: "[email protected],ou=People,dc=example,dc=org" (00003d53)
added: "[email protected],ou=People,dc=example,dc=org" (00003d54)
added: "[email protected],ou=People,dc=example,dc=org" (00003d55)
.######## 44.22% eta 05m05s elapsed 04m spd 29.2 k/s
added: "[email protected],ou=People,dc=example,dc=org" (00003d56)
added: "[email protected],ou=People,dc=example,dc=org" (00003d57)
added: "[email protected],ou=People,dc=example,dc=org" (00003d58)
added: "[email protected],ou=People,dc=example,dc=org" (00003d59)
A cada N entradas adicionadas, slapadd
escreve uma linha de saída de atualização de progresso ( .######## 44.22% eta 05m05s elapsed ...
) que eu quero manter e uma linha de saída para cada entrada criada que eu quero esconder porque expõe o endereço de e-mail das pessoas mas ainda quer contá-los para saber quantos usuários foram importados
A maneira como pensei em ocultar e-mails e mostrar a atualização do progresso é esta:
$ slapadd -v ... 2>&1 | tee log.txt | grep '########'
# => would give me real-time progress update
$ grep "added" log.txt | wc -l
# => once backup has been restored I would know how many users were added
Eu tentei variações diferentes das opções acima e, independentemente do que eu tente, não consigo usar a linha de saída de atualização do progresso.
Eu tracei slapadd
da seguinte forma:
sudo strace slapadd -v ...
E aqui está o que eu recebo:
write(2, "added: \"[email protected]"..., 78added: "[email protected],ou=People,dc=example,dc=org" (00000009)
) = 78
gettimeofday({1322645227, 253338}, NULL) = 0
_######## 44.22% eta 05m05s elapsed 04m spd 29.2 k/s ) = 80
write(2, "\n", 1
)
Como você pode ver, a porcentagem de linha não é enviada para stdout
ou stderr
(FYI validamos com comandos conhecidos em funcionamento e com falha que 2
é stderr
e 1
is stdout
)
Q1: onde está indo a linha de saída de atualização de progresso?
Q2: Como posso fazer isso ao enviar stderr para um arquivo?
Informações adicionais: estou executando Openldap 2.4.21
on ubuntu server 10.04
1ª atualização: informações potencialmente relevantes
De
link
("meter" é o que chamei acima da "linha de saída de atualização do progresso")
> No, the code only enables the meter if stdout (was: stderr) is a tty, so
> redirecting it anywhere disables it. The meter was enabled both by
> "slapadd -l file" and "slapadd< file", but "cat file | slapadd" did
> disable it. IMHO not exactly an obvious way..
Ainda restam minhas dúvidas, pois não sei o que fazer com essa informação adicional.