타임스탬프와 함께 특정 시간 이후에 생성되는 일부 로그 파일이 있습니다.
/mylog/path
Log_file_2018-07-19-22-55-31Z.tgz
Log_file_2018-07-20-01-29-11Z.tgz
Log_file_2018-07-20-10-36-49Z.tgz
Log_file_2018-07-21-18-26-36Z.tgz
날짜를 기준으로 오래된 로그를 삭제해야 합니다. 예를 들어 지난 5일간의 로그만 원하고 오래된 로그는 삭제해야 합니다. 매일 생성되는 로그 파일의 수는 다양합니다. 이 목표를 달성하는 방법은 무엇입니까?
답변1
명령에 mtime
(수정 시간)을 사용할 수 있습니다.find
find /mylog/path -mindepth 1 -mtime +5 -delete
-mindepth 1
명령줄 매개변수를 제외한 모든 파일이 처리됨을 나타냅니다.-mtime +5
5일 전에 수정된 파일을 확인합니다.-delete
삭제됩니다
답변2
귀하의 발견에는 해당 옵션이 없으므로 -mtime
이것이 가장 쉬운 방법이라고 생각합니다.
#!/bin/bash
# delete every file that's between 5 and 40 days old
for i in {5..40}; do
olddate=$(date --date="$i days ago" +%Y-%m-%d)
echo "Deleting files from $olddate..."
rm "Log_file_$olddate-*"
done
만약 너라면언제나5일 후에 로그 파일을 삭제하고 싶지만 어떤 이유로든 사용하고 싶지 않은 경우에는 ( crontab 편집)을 사용하여 다음 스크립트를 매일 실행할 logrotate
수 있습니다 .cron
crontab -e
olddate=$(date --date="5 days ago" +%Y-%m-%d) && rm "/mylog/path/Log_file_$olddate-*"