특정 디렉토리의 Tar 파일 스크립팅

특정 디렉토리의 Tar 파일 스크립팅

나는 특정 디렉토리로 이동하고 2일보다 오래된 모든 로그 파일을 tar.gz로 이동하는 Unix 스크립트를 작성하려고 합니다. 지금까지 이것을 가지고 있지만 작동하지 않습니다. 어떤 도움이라도 대단히 감사하겠습니다.

#!/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

어쨌든 find/ bzip2솔루션이 더 좋을 것이라는 @dhag의 의견에 동의합니다.

그것을 사용하는 것을 고려해 보셨나요 logrotate? 전용 소프트웨어를 사용할 수 있는데 왜 휠을 다시 작성해야 합니까?

답변2

이 명령은 find -type f -mtime +22일보다 오래된 파일을 찾습니다. 그런 다음 find의 옵션을 사용하여 -exec다음과 같이 압축할 수 있습니다.

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

파일에 대한 추가 정보(이름이 로 끝날 수도 있음 .log)를 알고 있는 경우 해당 정보를 필터( )에 추가하는 것이 현명할 수 있습니다 -name '*.log'.

관련 정보