帮助使用脚本来压缩和清除现有文件

帮助使用脚本来压缩和清除现有文件

我正在使用下面的命令来压缩和截断文件。我需要帮助将其合并为一个命令。

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包并使用它。

相关内容