我正在使用下面的命令来压缩和截断文件。我需要帮助将其合并为一个命令。
find *scan*.log -type f -size +1G |xargs -L1 -I file zip file.zip file
find *scan*.log -type f -size +1G |xargs -L1 -I file truncate -s 5000 file
答案1
对 find 找到的每个文件执行多项操作的通用方法如下:
find . -name '*scan*.log' -type f -size +1G -exec sh -c \
'for f in "$@"; do XXX "$f" ; YYY "$f" ; ZZZ "$f" ; done' \
sh {} +
这将为 find 传递到 sh 的每个文件名运行程序 XXX、YYY 和 ZZZ 一次,依次将相同的文件名传递给每个命令。
要轮换日志文件,您可能需要类似以下内容:
find . -name '*scan*.log' -type f -size +1G -exec sh -c \
'for f in "$@"; do
mv "$f" "$f.old"
pkill -1 <processname>
gzip -9 "$f.old"
done' sh {} +
其中<processname>
是写入日志文件的进程的名称。为此,需要编写它以在 HUP 信号上关闭并重新打开其日志文件。否则,请使用适合该程序的任何方法(包括终止和重新启动进程)。
或者,更好的是,安装该logrotate
包并使用它。