Utilicé, en lugar de mv, el cpcomando para lograrlo, que puede tener algunos archivos de registro en el lugar donde se está ejecutando un Software. Tal vez en el directorio de inicio del Usuario diferente o en el directorio de la aplicación y tenga todos los registros en un solo lugar como enlaces duros. Si usa el mvcomando, pierde el enlace duro. Si usa el cpcomando en su lugar, mantendrá este enlace rígido.
mi código es algo como:
TMP_FILE="$(mktemp "${TMPFILENAME}.XXX")"
for FILE in "${LOGFILE_DIR}"/* ; do
tail -n $MAXLINES "${FILE}" > "${TMP_FILE}"
if [ $(ls -g "${TMP_FILE}" | awk '{print $4}') -lt $(ls -g "${FILE}" | awk '{print $4}') ] ; then
cp "${TMP_FILE}" "${FILE}"
fi
done
Por lo tanto, si los archivos están en el mismo sistema de archivos, también puede otorgar algunos derechos diferentes a los usuarios y ${LOGFILE_DIR}modificar la longitud como lo hago yo.
Si es el mvcomando, pierde el enlace rígido entre los archivos y, por lo tanto, su segundo archivo no está más conectado al primero, tal vez se ubique en otro lugar.
Si en el otro lugar no permites que alguien borre el archivo, tus registros permanecerán juntos y serán controlados a través de tu propio script.
logrotateQuizás más agradable. Pero estoy contento con esta solución.
No se preocupe por el "" pero en mi caso hay algunos archivos con espacios y otras letras especiales y, si no hago el "" o el {}, todo no funciona bien.
Por ejemplo, hay un Dir donde los archivos más antiguos se comprimen automáticamente OLDFILE.zipy todo lo que se comprime también se enumera en Archivo, .zip_logpor lo que también .zip_logestá en este Dir pero en el LOGFILE_DIRque tengo con:
ln .zip_log "${LOGFILE_DIR}/USER_ZIP_log"
el archivo igual ya que es un enlace duro.
logrotatees la solución elegante