Eu tenho uma pasta usada pelo imapsync para armazenar seu próprio cache. Essa pasta contém uma subpasta para cada caixa de correio que estou sincronizando e nada mais:
[dv@monitor] find * -maxdepth 0 -type d | wc -l
126
[dv@monitor] find * -maxdepth 0 | wc -l
126
Todas as subpastas replicam a estrutura da caixa de correio do usuário / caixa de correio relacionado ( nota: imapsync
mantém o controle do servidor de e-mail de destino, portanto também adiciona uma referência a ele, mantida como uma estrutura de pastas adicional: 10.0.1.235
nos exemplos abaixo ).
[dv@monitor] find director -type d
director
director/10.0.1.235
director/10.0.1.235/director
director/10.0.1.235/director/Deleted Items
director/10.0.1.235/director/Deleted Items/Deleted Items
director/10.0.1.235/director/Contacts
director/10.0.1.235/director/Contacts/Contacts
[....]
director/10.0.1.235/director/INBOX
[...]
Dentro de cada subpasta imapsync
armazena um arquivo para cada uma das mensagens sincronizadas:
[dv@monitor] ls -l segreteria/10.0.1.235/segreteria/INBOX/INBOX | head -n 10
totale 0
-rw-r--r-- 1 root root 0 19 set 23:36 1000_109
-rw-r--r-- 1 root root 0 19 set 23:36 10009_1342
-rw-r--r-- 1 root root 0 19 set 23:36 10011_1343
-rw-r--r-- 1 root root 0 19 set 23:36 10013_1344
-rw-r--r-- 1 root root 0 19 set 23:36 10028_1345
-rw-r--r-- 1 root root 0 19 set 23:36 10042_1346
-rw-r--r-- 1 root root 0 19 set 23:36 10046_1347
-rw-r--r-- 1 root root 0 19 set 23:36 10048_1348
-rw-r--r-- 1 root root 0 19 set 23:36 10050_1349
Agora, como estou solucionando problemas imapsync
, preciso identificar rapidamente caixas de correio que certamente tiveram problemas com a sincronização. Basicamente, eu simplesmente preciso contar o número de arquivos armazenados em cada uma das pastas de primeiro nível .
Como eu sou fã do " encontrar é um ótimo programa. Aprenda sobre isso! " conceito, meu primeiro palpite foi algo como:
[**NOT WORKING**] find * -type d -maxdepth 0 -exec 'find {} -type f | wc -l' \;
mas não funcionou.
Após mais de 30 minutos de pesquisa e aprendizagem baseadas na Internet, e mesmo depois de ler este outro post do StackOverflow , eu tive (levemente) sucesso com:
find * -maxdepth 0 -type d -exec sh -c "echo -n {} ; echo -n : ; find {} -type f | wc -l" \;
Observe que, no find
acima, o primeiro {}
foi expandido corretamente pelo nome da pasta de primeiro nível, enquanto o segundo {}
foi expandido corretamente com cada arquivo contido aqui.
Infelizmente, a saída está no formato <mailbox>:<number_of_messages>
como:
director:25
sv:25
segreteria:11532
registration:146
newsletter:240
O que eu ainda sentia falta era um formulário trivial para sort
da saída, com base no número de mensagens. Se a saída for invertida ( <number_of_messages>:<mailbox>
), um simples:
.... | sort -n
teria resolvido minhas necessidades, com apenas 9 caracteres adicionais .
Então, tentei alterar a ordem do echo
dentro do aninhado find
. Algo como:
[**not working**] find * -type d -maxdepth 0 -exec sh -c "find {} -type f | wc -l ; echo -n : ; echo -n {} ;" \;
mas não funcionou, provavelmente devido à necessidade de expandir {}
na ordem inversa (primeira ocorrência de {}
sendo expandida pela segunda find
; segunda ocorrência de {}
sendo expandida pela primeira find
).
Então, depois de toda a introdução acima, alguém pode me indicar como adaptar essa linha de trabalho (trabalhando corretamente):
find * -maxdepth 0 -type d -exec sh -c "echo -n {} ; echo -n : ; find {} -type f | wc -l" \;
de maneira a reverter a saída ( <number>:<mailbox>
ou, melhor ainda, <number><space><mailbox>
)?
(PS: obviamente há muitas maneiras de atingir esse objetivo. Quanto a mim, não teria problema em disparar um script perl de 3/4 linhas para dividir / reverter a saída de cada linha. Estou interessado em soluções que exigem uma "pequena adição" de caracteres; algo como | sort -n
. De qualquer forma, todas as sugestões / sugestões são bem-vindas)