Existe algum comando Linux embutido para exibir o conteúdo de um diretório em tempo real?

8

Existe algum comando Linux embutido para exibir o conteúdo de um diretório em tempo real? Semelhante ao comando "tail -f file_name", que exibe o conteúdo de um arquivo em tempo real.

Goku__
fonte
4
Como sobrewatch -n1 ls
Joe
Dê uma olhada no watch ( linfo.org/watch.html )
David Segonds
4
Não é totalmente embutido, mas o inotifytoolspacote usa o inotifyrecurso do Linux para permitir a visualização de eventos de criação de arquivos à medida que ocorrem.
Chepner 12/08/14

Respostas:

6

você pode fazer isso usando watch. Não é completamente em tempo real, mas perto o suficiente (até um décimo de segundo):

watch -n0.1 ls

do manual:

-n, --interval seconds
          Specify update interval.  The command will not allow quicker than 0.1 second interval, in which the smaller values are converted.
Chris Maes
fonte
11
Se você deseja ver novos arquivos com mais clareza, use ls -ltpara ver novos arquivos na parte superior da lista ou ls -ltrpara ver novos arquivos na parte inferior. Em seguida, para realçar esses novos arquivos, use watch -dpara destacar as alterações na atualização mais recente ou watch --differences=cumulativepara realçar todas as alterações desde que watchfoi iniciado.
garyjohn
@ jm666 - watch tail lsou watch head lsirá mostrar os arquivos mais recentes com os corretos ls opções, tais como a encomenda com cabeça ou -ltr com cauda .
AFH
@ jm666 - É claro que é um absurdo, se tomado literalmente: Eu estava usando-o como uma abreviação parawatch {options} 'ls {options} | tail {options}'
AFH
@ jm666: A solicitação era para um comando que segue as alterações em um diretório, da tail -fseguinte maneira no arquivo. Seu comando original era que watchnão fazia isso muito bem. Eu acho que sim, se o comando que ele executa for criado apropriadamente. Às vezes você precisa usar sh -cpara quebrar um comando mais complicado. Eu olhei brevemente para o inotify-tools e não vi um comando que mostrasse as alterações em um diretório, não apenas os eventos aplicados a um diretório.
garyjohn
2

Eu escrevi isso, espero que seja disso que você precisa. Não é um built-in Linux command, mas ele usa apenas programas comuns presentes na maioria das caixas UNIX.

Ajuste o sleeptempo conforme necessário. Eu usaria um valor de pelo menos 2 segundos. Use cmd="ls"para estrutura não recursiva ou cmd="find DIRNAME"para pesquisar recursivamente. Observe que, no último caso, você obterá um DIRNAME/prefixo para todos os arquivos e diretórios.

 echo "" | awk '{while ( 1 ) {cmd="find ."; delete b;c=0; while ( ( cmd | getline result ) > 0 ) {test=1;c++;n=0;for (i in a) {n++;if (a[i]==result) {b[c]=i; test=0; break;}} if (test) {n++;a[n]=result;b[c]=n;print "##NEW## "result }} close (cmd); for (i in a) {test=1;for (j in b) {if (b[j]==i) {test=0;break}} if (test) {print "##DELETED## "a[i]; delete a[i]}} system("sleep 5") } }'
NuTTyX
fonte
Encontrou um bug que fazia ivalor perdido depois de fazer um loop que fez o roteiro mostra tudo como novo cada vez em algumas máquinas Linux
NuTTyX
1

Isso é tão simples depois que eu sei.

watch -d dir_name
Goku__
fonte
0

Você pode usar inotifytoolse seus utilitários de linha de comando.

Você pode usar inotifypara monitorar o diretório, e ele retornará eventos para o próprio diretório e para arquivos dentro do diretório.

Outra ferramenta que pode ser usada é inotifywatch:

sudo inotifywatch -v -r /foo

Você pode adicionar -rpara assistir a todos os subdiretórios recursivamente. No entanto, esta solução não detecta alterações nos arquivos recém-criados .

Portanto, outra solução é usar inotifywait:

inotifywait -m --format "%f" /foo

Aqui está outro exemplo de exibição do conteúdo de todos os test*arquivos recém-criados em /tmp:

inotifywait -m --format "%f" /tmp | grep --line-buffered ^test | xargs -L1 -I% sudo cat /tmp/% 2> /dev/null
kenorb
fonte