编写特定目录中 Tar 文件的脚本

编写特定目录中 Tar 文件的脚本

我正在尝试编写一个 Unix 脚本,该脚本将转到特定目录并 tar.gz 所有超过 2 天的日志文件。到目前为止我已经有了这个,但它不起作用。任何帮助,将不胜感激。

#!/bin/bash

AGE_TO_COMPRESS="2419200" # 172800 seconds = 2 days
LOG_FILES="/myfile/logs"

for file in $LOG_FILES;
do
  if [ $(( `date +%s`)) -gt ${AGE_TO_COMPRESS} ]
     then
        tar -cvzf $file.tar.gz $file;
     fi
  fi
done

答案1

我纠正了你的脚本中最明显的错误。我认为它将LOG_FILES包含要压缩的文件列表。

#!/bin/bash

AGE_TO_COMPRESS=2419200 # 28 days

# list of file to compress
LOG_FILES="/tmp/test/test /tmp/test/test2 /tmp/test/test3 /tmp/test/test4"

# Any file older than EDGE_DATE must be compressed
NOW=$( date +%s )
EDGE_DATE=$(( NOW - AGE_TO_COMPRESS ))

for file in $LOG_FILES ; do
    # check if file exists
    if [ -e "$file" ] ; then 

        # compare "modified date" of file to EDGE_DATE
        if [ $( stat -c %Y "$file" ) -lt ${EDGE_DATE} ] ; then

            # create tar file of a single file
            # this is an odd way to compress a file
            tar -cvzf $file.tar.gz $file

            # do we want to delete the old file?
            # rm "$file"
        fi
    fi
done

无论如何,我同意@dhag 的观点,即find/bzip2解决方案会更好。

你考虑过使用吗logrotate?既然有专用软件,为什么还要重写轮子呢?

答案2

该命令find -type f -mtime +2将查找超过两天的文件。然后你可以使用 find 的选项-exec来压缩它们;也许是这样的:

find -type f -mtime +2 -exec gzip {} +

如果您了解有关该文件的额外信息,也许它们的名称都以 结尾.log,那么将其添加到您的过滤器 ( ) 可能是明智的-name '*.log'

相关内容