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.
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.
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") } }'
watch -n1 ls
inotifytools
pacote usa oinotify
recurso do Linux para permitir a visualização de eventos de criação de arquivos à medida que ocorrem.Respostas:
você pode fazer isso usando
watch
. Não é completamente em tempo real, mas perto o suficiente (até um décimo de segundo):do manual:
fonte
ls -lt
para ver novos arquivos na parte superior da lista ouls -ltr
para ver novos arquivos na parte inferior. Em seguida, para realçar esses novos arquivos, usewatch -d
para destacar as alterações na atualização mais recente ouwatch --differences=cumulative
para realçar todas as alterações desde quewatch
foi iniciado.watch tail ls
ouwatch head ls
irá mostrar os arquivos mais recentes com os corretos ls opções, tais como a encomenda -É com cabeça ou -ltr com cauda .watch {options} 'ls {options} | tail {options}'
tail -f
seguinte maneira no arquivo. Seu comando original era quewatch
não fazia isso muito bem. Eu acho que sim, se o comando que ele executa for criado apropriadamente. Às vezes você precisa usarsh -c
para 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.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
sleep
tempo conforme necessário. Eu usaria um valor de pelo menos 2 segundos. Usecmd="ls"
para estrutura não recursiva oucmd="find DIRNAME"
para pesquisar recursivamente. Observe que, no último caso, você obterá umDIRNAME/
prefixo para todos os arquivos e diretórios.fonte
i
valor perdido depois de fazer um loop que fez o roteiro mostra tudo como novo cada vez em algumas máquinas LinuxIsso é tão simples depois que eu sei.
fonte
Você pode usar
inotifytools
e seus utilitários de linha de comando.Você pode usar
inotify
para 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
:Você pode adicionar
-r
para 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
:Aqui está outro exemplo de exibição do conteúdo de todos os
test*
arquivos recém-criados em/tmp
:fonte