我有包含子文件夹和会话日志的文件夹。我需要一些命令或脚本来压缩此文件夹而不使用使用文件,然后将其删除。我有这个结构,但我不确定这是否会留下文件进行处理。
tar -zcvf /srv/log/prod/dms/espis/documentum/log/00029392-$(date +%F).tar /srv/log/prod/dms/espis/documentum/log/0002939
cd /srv/log/prod/dms/espis/documentum/log/00029396
rm -R *
有任何想法吗?
答案1
实际上将rm -R
删除所有文件(如果有足够的权限)。如果您只想保留当前打开的文件,您可以使用 进行检查:它将列出位于和 当前打开的lsof +D /srv/log/prod/dms/
所有文件。/srv/log/prod/dms/
请小心,要编写脚本,您应该确保您的守护进程保持其文件处理程序打开(我的意思是,确保它仅在需要写入时才打开它们......)。
因此,在您之后tar
,您可以编写类似的脚本:
for f in $( find /srv/log/prod/dms/espis/documentum/log -type f -print ) ; do
lsof +D /srv/log/prod/dms/espis/documentum/log | grep -w $f\$ >/dev/null
if [ $? -eq 1 ] ; then
echo "Delete $f"
else
echo "Keep $f"
fi
done
编辑:当然,如果您的守护程序运行日志轮换,则删除早于以下时间的日志文件会更容易n天与类似的东西find /srv/log/prod/dms/espis/documentum/log -type f -mtime +99 -exec rm -f {} \;
(这里的-mtime +99
意思是“自 99 天以来未修改”)