Localiza arquivos que terminam com número

8

Estou tentando fazer algum script de backup enquanto os arquivos de log ficam cada vez maiores. O que eu tenho é lidar com o arquivo atual (por exemplo, secure file em /var/log/ ) e remover o conteúdo desse arquivo. Mas existem alguns arquivos com o nome: secure.1 , secure.2 e tudo isso eu gosto de contá-los, e se o número for maior, então 2 arquiva todos eles. Não consigo encontrar o método para encontrar esses arquivos ou contá-los. O primeiro pensamento que veio até mim foi:

find /var/log/ -name *.1 | wc -l

e isso sempre imprimirá 1 , pois há um arquivo secure.1 . Como posso contar como no loop para onde eu posso especificar um intervalo de números como {1..5} ou similar. Existe uma maneira de separar esses arquivos e torná-los como um deles e backup ou excluir ou o que nunca ... ou antes de tudo, como posso encontrar todos esses números que acaba com o número.

    
por user3523605 18.11.2014 / 17:01

3 respostas

12

Com o simples -name :

find /var/log -name '*.[2-9]'

ou para qualquer dígito:

find /var/log -name '*.[[:digit:]]'

ou se outros caracteres forem possíveis após o dígito:

find /var/log -name '*.[2-9]*'
    
por 18.11.2014 / 17:28
3

Para encontrar os nomes de arquivos que terminam com um número varia de . [1 a 5].

find /var/log/ -type f -regextype sed -regex ".*\.[1-5]$"
    
por 18.11.2014 / 17:09
1

Por que não apenas ...

for log in /var/log/*.[1-5]
do whatever to "$log"
done

Você não precisa de find , tanto quanto eu posso dizer - o shell usa os mesmos globs que ele faz em -name . E se todos os arquivos estiverem em um único diretório ... É claro que, se houver subdiretórios nos quais você também esteja interessado, find pode ser benéfico - andar por árvores no shell pode ser uma dor de cabeça.

    
por 04.12.2014 / 13:39