comando de localização do Linux - mostra o progresso

21

Eu queria saber se há alguma maneira de exibir algum tipo de informação de progresso ao procurar por arquivos no linux usando find . Eu sempre me encontro procurando arquivos em um disco grande e algum tipo de indicador de progresso seria muito útil, como uma barra ou pelo menos o diretório atual "localizar" pesquisas. Há algum script que faça isso, ou find apoiar alguns ganchos?

    
por Vlad Balmos 15.12.2011 / 09:16

6 respostas

28

com este truque você pode ver a pasta atual - mas sem barra de progresso - desculpe.

 watch readlink -f /proc/$(pidof find)/cwd
    
por 15.12.2011 / 09:48
7

Um pequeno utilitário chamado pv (visualizador de canos) pode ajudar. Do resumo fantástico de Peteris Krumins:

O visualizador de tubulação é uma ferramenta baseada em terminal para monitorar o progresso dos dados por meio de um pipeline.

Você pode usar pv de várias maneiras. Ao jogar por aqui, eu coloco imediatamente após um pipe para monitorar o progresso da saída gerada pelo find (deve passar stdin para stdout intocado)

find / -mtime -1h | pv > /dev/null

que mostrará a saída um pouco assim:

6.42MB 0:01:25 [31.7kB/s] [         <=>      ]

(eu redirecionei o stdout para / dev / null para que eu pudesse ver a barra de progresso em ação sem que a saída voasse. Essa provavelmente não é a sua intenção com o find, portanto adapte-a de acordo)

Eu honestamente não tenho certeza de como isso funciona na natureza. Para as descobertas "caras", como a acima (passando da raiz), ela parece funcionar razoavelmente bem. Para comandos mais simples em um nó mais profundo na árvore de diretórios, o pv falhou miseravelmente. Esses comandos estão retornando os resultados imediatamente, portanto, uma barra de progresso provavelmente está disponível aqui.

De qualquer forma, brinque e veja se isso funciona para o que você precisa. Alimento para o pensamento, pelo menos.

    
por 15.12.2011 / 10:54
5

Eu procurei por isso hoje e cheguei aqui via Google. Eu tive uma longa descoberta executando no OS X e, aparentemente, watch não existe lá. Então, aqui está outra solução:

lsof -Fn -a -c find -d cwd +r 10

  • lsof = lista de arquivos abertos
  • -Fn = apenas mostra o nome do arquivo / diretório (prefixado com o caractere 'n', pule isto se você preferir o lsof output completo
  • -a = informar lsof para mostrar apenas as linhas que correspondem aos critérios all (por padrão, ele mostra linhas correspondentes a qualquer critério)
  • -c find = mostrar arquivos / diretórios abertos pelo processo chamado find (na verdade, processo cujo nome começa com find , mas diferencia maiúsculas de minúsculas, então Finder não será exibido)
  • -d cwd = mostra linhas com FD (filedescriptor) cwd (diretório de trabalho atual)
  • +r 10 = mostra a saída a cada 10 segundos até que nenhum arquivo aberto seja encontrado (find is finished)

Isso mostrará o diretório find está processando a cada 10 segundos, portanto, ele deve dar uma ideia se find ainda estiver funcionando e o quanto progrediu.

    
por 01.02.2014 / 17:50
4

Há um exemplo de pesquisas paralelas com find em man find . Usando-o, você pode executar várias verificações para cada item, executando várias ações, dependendo de qual condição funciona. A primeira verificação pode ser, por exemplo, simples -print , portanto, todos os nomes são impressos em stdout. A segunda verificação fará o que você quiser. Algo como:

find /work \( -fprint /dev/stderr \) , \( -name 'core' -exec rm {} \; \)

Se a segunda verificação também exibir nomes de arquivos, você poderá redirecionar um deles para stderr usando -fprint /dev/stderr .

    
por 15.12.2011 / 10:47
2

AFAIK, isso não acontece e implementá-lo não seria trivial.

... Hmm. Talvez um script executando find <target dir> -type d primeiro, armazenando a lista e ecoando cada diretório antes de executar um find <list item> -maxdepth 1 <rest of find parameters> em um loop for.

Note que você está trocando uma / significativa / perda de desempenho em troca de poder ver vagamente o que está fazendo.

    
por 15.12.2011 / 09:24
1

Esta é uma lista dos arquivos atuais abertos por find , então é o mesmo que encontrar está procurando "agora".

É leve como apenas o endereço de consulta dos descritores de arquivo usados por encontrar a cada segundo e não interfere em encontrar . Além disso, você pode fazer isso com qualquer programa que desejar.

# watch -n 1 'ls -l /proc/$(pidof find)/fd | cut -d ">" -f 2 | grep -v /dev/'

O grep -v /dev/ é para ocultar os arquivos STDOUT, STDIN e STDERR, que são arquivos usados para receber e imprimir dados no seu console.

    
por 21.03.2018 / 03:21

Tags