Encontre arquivos que terminem com número

10

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

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

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

user3523605
fonte
1
Você esqueceu de citar o curinga? find /var/log/ -name '*.1' ...
Muru
1
Eu acho que você deve verificar o logrotateseu propósito.
Costas

Respostas:

15

Com 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]*'
jimmij
fonte
como encontrar aqueles que APENAS contêm dígitos em seu nome?
letthefireflieslive
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]$"
Avinash Raj
fonte
1

Por que não apenas ...

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

Você não precisa find, tanto quanto eu posso dizer - o shell usa os mesmos globs que ele usa -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, findpode ser benéfico - andar em árvores no shell pode ser uma dor de cabeça.

mikeserv
fonte