tail todos os arquivos de log em um diretório | excluir arquivos compactados

5

Estou tentando encontrar o comando certo para seguir um monte de arquivos de log enquanto excluo os arquivos compactados em um diretório definido. Os arquivos de log estão sendo compactados quando se tornam superdimensionados.

No momento estou usando:

tail -f /var/logs/myLog*

O que funciona bem, mas também vai atar os arquivos .gz, que são uma bagunça ilegível. Eu preciso apenas seguir arquivos sem essa extensão.

    
por JackalopeZero 20.10.2014 / 11:14

4 respostas

3

Se os nomes dos arquivos tiverem algo mais em comum - por exemplo, comprimento do nome, número de períodos no nome, nome terminando ... você pode simplesmente ajustar o seu glob.

Se não, existem outras formas:

tail -f 'ls -l /var/logs/myLog* |grep -v .gz$'

ou, usando xargs:

ls /var/logs/myLog* | grep -v .gz$ | xargs tail -f
    
por 20.10.2014 / 12:42
6

Normalmente, tail -f /var/logs/myLog*log funcionará. No entanto, se o final dos nomes de arquivos for imprevisível, e realmente a única maneira é excluir os arquivos que terminam em .gz , isso se torna mais complicado. Uma possibilidade é esta:

ls /var/logs/myLog* | grep -v .gz$ | xargs tail -f
    
por 20.10.2014 / 12:40
2

Em bash , se a opção extendedglob estiver definida (por padrão), você pode negar um padrão glob colocando-o entre parênteses e prefixando um estrondo ( ! ). Por exemplo, !(*.gz) corresponde a todos os itens cujos nomes não terminam com .gz . Veja a subseção Pathname Expansion na seção EXPANSION na página de manual bash para mais informações.

Em zsh , se a opção extglob estiver definida (é não , por padrão), você pode negar um padrão glob inserindo um sinal de intercalação ( ^ ). Por exemplo, ^*.gz corresponde a todos os itens cujos nomes não terminam com .gz . Veja a seção FILENAME GENERATION na página de manual zshexpn para mais informações.

Observe que, em geral, se você quiser usar ls com um padrão glob, deverá especificar -d . Isso ocorre porque o shell expande o padrão glob em uma lista de nomes correspondentes, passando cada um deles para ls como um argumento separado. Se você não usar -d , ls listará os conteúdos de quaisquer diretórios cujos nomes são fornecidos.

    
por 23.10.2014 / 07:19
0

Você também pode usar a opção -n para especificar que não deseja as "antigas":

tail -f -n 0 /var/log/*

ou

tail -fn0 /var/log/*
    
por 16.08.2016 / 14:30