find /var/log/myfile.*.txt -type f
Si no hay ningún archivo que coincida con ese patrón, obtengo registros de errores como No such file or directory
.
Pregunta: ¿cómo puedo evitar solo este mensaje de error? Por supuesto, podría agregar un 2>/dev/null
al final, pero eso eliminaría cualquier error. ¿Cómo podría simplemente ignorar el mencionado?
Porque tengo un cronjob que elimina algunos archivos periódicamente y siempre registra errores si no hay ningún archivo presente:
@daily find /var/log/myfile.*.txt -mtime +7 -delete
Respuesta1
Lo correcto en este caso es no activar este mensaje en absoluto.
Cuando ejecutas esto en un shell
find /var/log/myfile.*.txt -type f
/var/log/myfile.*.txt
se expande por el caparazón; find
obtiene objetos expandidos o literales /var/log/myfile.*.txt
si no hay coincidencias. Este último caso desencadena No such file or directory
.
Puede crear un archivo ficticio primero: touch '/var/log/myfile.dummy_name.txt'
(compararelefante en el cairo). Sin embargo, esta "solución" no es realmente elegante.
Una mejor solución es manejar find
el patrón:
find /var/log/ -type f -name "myfile.*.txt"
donde las comillas dobles evitan que se peguen en el shell (compáreseeste). En este caso *
es manejado por el find
propio porque -name
admite dichos patrones.
Sin embargo, el enfoque anterior puede coincidir myfile.*.txt
encualquier subdirectoriode /var/log/
también. Si tu find
soporte -maxdepth
, úsalo:
find /var/log/ -maxdepth 1 -type f -name "myfile.*.txt"
Si no, mira esto:¿Limitar la búsqueda POSIX a una profundidad específica?
Probablemente su sistema operativo ya lo utilice logrotate(8)
para administrar archivos de registro.
En mi Debian logrotate
se ejecuta a diario debido a /etc/cron.daily/logrotate
; Debería ser similar en Ubuntu. Puedo crear una configuración personalizada /etc/logrotate.d/
y administrar archivos de registro arbitrarios de esta manera. Considere este enfoque.