Eu tenho um diretório de 30 TB com bilhões de arquivos, formalmente todos os arquivos JPEG. Estou excluindo cada pasta de arquivos como esta:
sudo rm -rf bolands-mills-mhcptz
Este comando é executado e não mostra nada, esteja funcionando ou não.
Eu quero ver como está excluindo arquivos ou qual é o status atual do comando.
rm
progress-information
Junaid Farooq
fonte
fonte
rm -ri
. Será divertido!Respostas:
Você pode usar
rm -v
para terrm
imprimir uma linha por arquivo excluído. Dessa forma, você pode ver querm
realmente está trabalhando para excluir arquivos. Mas se você tiver bilhões de arquivos, tudo o que verá é querm
ainda está funcionando. Você não terá idéia de quantos arquivos já foram excluídos e quantos restam.A ferramenta
pv
pode ajudá-lo com uma estimativa de progresso.http://www.ivarch.com/programs/pv.shtml
Aqui está como você iria invocar
rm
compv
com o exemplo de saídaNeste exemplo, eu disse
pv
que existem1000
arquivos. A saída depv
mostra que 562 já foram excluídos, o tempo decorrido é de 7 segundos e a estimativa a ser concluída é de 5 segundos.Alguma explicação:
pv -l
fazpv
contar por novas linhas em vez de bytespv -s number
informapv
qual é o total para que você possa fazer uma estimativa.logfile
no final é para saída limpa. Caso contrário, a linha de status depv
será confundida com a saída derm -v
. Bônus: você terá um arquivo de log do que foi excluído. Mas cuidado, o arquivo ficará enorme. Você também pode redirecionar para/dev/null
se não precisar de um log.Para obter o número de arquivos, você pode usar este comando:
Isso também pode levar um longo tempo se houver bilhões de arquivos. Você pode usar
pv
aqui também para ver o quanto isso contouAqui diz que levou 4 segundos para contar 278k arquivos. A contagem exata no final (
278044
) é a saída dewc -l
.Se você não quiser esperar a contagem, poderá adivinhar o número de arquivos ou usar
pv
sem estimativa:Assim, você não terá nenhuma estimativa para concluir, mas pelo menos verá quantos arquivos já foram excluídos. Redirecione para
/dev/null
se você não precisar do arquivo de log.Nitpick:
sudo
?rm -r
é suficiente para excluir recursivamente. não precisarm -f
.fonte
pv
, supondo que não seja muito caro contar os bilhões de arquivos ;-). (Pode demorar quase tanto tempo como orm
que é suposto medir!)pv
atualiza a barra de progresso apenas uma vez por segundo, apesar de sua entrada. Portanto, o terminal precisa exibir apenas uma linha em vez de uma tonelada por segundo.pv
só precisa incrementar um contador para cada nova linha que encontrar; isso precisa ser mais rápido do que fazer quebra automática de linha e outros enfeites para exibir uma linha em um terminal. Eu acho que rodarpv
dessa maneira faz com que as remoções de arquivos sejam mais rápidas do que simplesrm -rv
.rm -rv dirname | pv -l -s $(find dirname | wc -l) > logfile
Confira a resposta da lesmana , é muito melhor que a minha - especialmente o último
pv
exemplo, que não levará muito mais tempo que o silencioso original,rm
se você especificar em/dev/null
vez delogfile
.Supondo que seu
rm
suporte seja a opção (provavelmente funciona desde que você esteja executando o Linux), você pode executá-lo no modo detalhado com-v
:Como foi apontado por vários comentadores, isso pode ser muito lento devido à quantidade de saída gerada e exibida pelo terminal. Você poderia redirecionar a saída para um arquivo:
e observe o tamanho de
rm-trace.txt
.fonte
Outra opção é observar o número de arquivos no sistema de arquivos diminuir. Em outro terminal, execute:
A contagem de inodes usados diminuirá conforme o
rm
progresso. (A menos que os arquivos tenham principalmente vários links, por exemplo, se a árvore foi criada comcp -al
). Isso rastreia o progresso da exclusão em termos de número de arquivos (e diretórios).df
sem-i
rastreará em termos de espaço usado.Você também pode executar
iostat -x 4
para ver operações de E / S por segundo (assim como kiB / s, mas isso não é muito relevante para E / S de metadados puros).Se você ficar curioso sobre quais arquivos
rm
estão trabalhando no momento, você pode anexástrace
-lo e ver como asunlink()
chamadas do sistema (e getdents) são exibidas no seu terminal. por exemplosudo strace -p $(pidof rm)
. Você pode encontrar^c
o caminho para desanexarrm
sem interrompê-lo.Eu esqueço se o
rm -r
diretório de alterações na árvore está sendo excluído; se assim você poderia olhar/proc/<PID>/cwd
. Sua/proc/<PID>/fd
força, muitas vezes têm um diretório fd aberto, para que você possa olhar para isso para ver o que o seurm
processo está actualmente a analisar.fonte
df -ih
é realmente uma maneira barata e agradável de assistir aorm
progresso./boot
partição do sistema EFI.Embora todas as respostas acima sejam úteis
rm
,rm
pode ser bastante lento na exclusão de um grande número de arquivos, como observei recentemente ao extrair ~ 100K arquivos de um arquivo .tar na verdade demorou menos tempo do que excluí-los. Embora isso realmente não responda à pergunta que você fez, uma solução melhor para o seu problema pode ser o uso de um método diferente para excluir seus arquivos, como uma das respostas anteriores a esta pergunta .Meu método favorito pessoal é usar
rsync -a --delete
. Eu acho que esse método executa com rapidez suficiente para que valha a facilidade de uso sobre a resposta mais votada para essa pergunta , na qual o autor escreveu um programa em C que você precisaria compilar. (Observe que isso produzirá todos os arquivos que estão sendo processados no stdout, assim comorm -rv
; isso pode retardar o processo em uma quantidade surpreendente. Se você não desejar essa saída, usersync -aq --delete
ou redirecione a saída para um arquivo.)O autor dessa resposta diz:
Eu descobri que isso é bom o suficiente para meus propósitos. Também é potencialmente importante com essa resposta, pelo menos se você estiver usando o ext4:
fonte
rm
e / oufind --delete
ser eficiente. Ponto interessante sobre a exclusão na ordem de classificação para evitar reequilíbrios da árvore b durante a exclusão. Não tenho certeza de quanto disso se aplica a outros sistemas de arquivos. O XFS também não é ótimo, com milhões de arquivos por diretório. IDK sobre BTRFS, mas tenho a impressão de que pode ser bom para esse tipo de coisa.Uma coisa que você poderia fazer seria iniciar o
rm
processo em segundo plano (sem saída, para que não seja mais lento) e depois monitorá-lo em primeiro plano com um simples comando (a) :O
find/wc
combo pode ser substituído por qualquer ferramenta capaz de fornecer as unidades que você deseja.(a) Bem, relativamente simples, comparado com, por exemplo, a física nuclear, a hipótese de Riemann ou o que comprar minha esposa para o Natal :-)
fonte
Há um tempo atrás escrevi algo para imprimir a taxa em que as linhas foram impressas. Você pode executar
rm -rfv | ./counter
e imprimir linhas por segundo / min. Embora não seja um progresso direto, ele fornecerá algum feedback sobre a taxa de progresso, talvezrm
sobre um sistema de arquivos de rede ou similar?O link para o código está aqui:
http://www.usenix.org.uk/code/counter-0.01.tar.gz
fonte