Eu usei, em vez de mv
, o comando cp
para conseguir que você tenha alguns arquivos de log no lugar onde um Software está sendo executado. Talvez no diretório home User diferente ou no diretório app e tenha todos os logs em um só lugar como hardlinks. Se você usar o comando mv
, perderá o link físico. Se você usar o comando cp
, você manterá esse link físico.
meu código é 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
Portanto, se os arquivos estiverem no mesmo sistema de arquivos, você poderá conceder também alguns direitos diferentes aos usuários e, em ${LOGFILE_DIR}
, modificar o comprimento como eu faço.
Se for o comando mv
, você perde o hardlink entre os arquivos e, portanto, o segundo arquivo não está mais conectado ao primeiro - talvez colocado em algum outro lugar.
Se, em outro lugar, você não permitir que alguém apague o arquivo, seus logs permanecerão juntos e serão controlados com facilidade pelo seu próprio script.
logrotate
talvez melhor. Mas estou feliz com esta solução.
Não seja perturbado pelo "" mas no meu caso existem alguns arquivos com espaços e outras letras especiais e Se eu não fizer o "" redor ou o {} o lote inteiro não funciona bem .
Por exemplo, há um diretório em que arquivos antigos são compactados automaticamente em um OLDFILE.zip
e tudo que é compactado também está listado no arquivo .zip_log
, então o .zip_log
também está nesse diretório, mas no LOGFILE_DIR
Eu tenho com:
ln .zip_log "${LOGFILE_DIR}/USER_ZIP_log"
o arquivo igual, pois é um link físico.