
Estoy intentando crear un script de copia de seguridad a medida que los archivos de registro crecen cada vez más. Lo que tengo es copiar el archivo actual (por ejemplo, secure
el archivo en /var/log/
) y eliminar el contenido de ese archivo. Pero hay algunos archivos con nombres como: secure.1
, secure.2
y todo esto me gusta contarlos, y si el número es mayor, 2
archivarlos todos. No puedo encontrar el método para encontrar estos archivos o contarlos. Lo primero que se me ocurrió fue:
find /var/log/ -name *.1 | wc -l
y esto siempre se imprimirá 1
ya que hay un archivo secure.1
. ¿Cómo puedo contar en un bucle for donde puedo especificar un rango de números similares {1..5}
o similares? ¿Hay alguna manera de separar estos archivos y convertirlos en uno solo y hacer una copia de seguridad o eliminarlos o lo que sea... o, en primer lugar, cómo puedo encontrar todos estos números que terminan en un número?
Respuesta1
Con sencillo -name
:
find /var/log -name '*.[2-9]'
o para cualquier dígito:
find /var/log -name '*.[[:digit:]]'
o si son posibles otros caracteres después del dígito:
find /var/log -name '*.[2-9]*'
Respuesta2
Para encontrar los nombres de archivos que terminan con un número oscila entre .
[1 y 5].
find /var/log/ -type f -regextype sed -regex ".*\.[1-5]$"
Respuesta3
¿Por qué no simplemente...?
for log in /var/log/*.[1-5]
do whatever to "$log"
done
find
Por lo que yo sé, no es necesario : el shell utiliza los mismos globos que en -name
. Y si todos los archivos están en un solo directorio... Por supuesto, si hay subdirectorios que también le interesan, entonces find
podría ser beneficioso: caminar árboles en el shell puede ser un dolor de cabeza.