나는 특정 디렉토리로 이동하고 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 +2
2일보다 오래된 파일을 찾습니다. 그런 다음 find의 옵션을 사용하여 -exec
다음과 같이 압축할 수 있습니다.
find -type f -mtime +2 -exec gzip {} +
파일에 대한 추가 정보(이름이 로 끝날 수도 있음 .log
)를 알고 있는 경우 해당 정보를 필터( )에 추가하는 것이 현명할 수 있습니다 -name '*.log'
.