
Estou tentando criar um script de backup à medida que os arquivos de log ficam cada vez maiores. O que eu tenho é copiar o arquivo atual (por exemplo, secure
arquivo em /var/log/
) e remover o conteúdo desse arquivo. Mas existem alguns arquivos com nomes como: secure.1
, secure.2
e tudo isso gosto de contá-los, e se o número for maior então 2
arquivar todos. Não consigo encontrar o método para encontrar esses arquivos ou contá-los. A primeira coisa que me veio à cabeça foi:
find /var/log/ -name *.1 | wc -l
e isso sempre será impresso, 1
pois há um arquivo secure.1
. Como posso contar como no loop for, onde posso especificar um intervalo de números semelhantes {1..5}
ou semelhantes. Existe uma maneira de separar esses arquivos e torná-los um só e fazer backup ou excluí-los ou o que quer que seja ... ou antes de tudo, como posso encontrar todos esses números que terminam com número.
Responder1
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]*'
Responder2
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]$"
Responder3
Por que não apenas...
for log in /var/log/*.[1-5]
do whatever to "$log"
done
find
Pelo que eu sei, você não precisa - o shell usa os mesmos globos que usa no -name
. E se todos os arquivos estiverem em um único diretório... Claro, se houver subdiretórios nos quais você também esteja interessado, isso find
pode ser benéfico - andar em árvores dentro da casca pode ser uma dor de cabeça.