현재 로그 파일을 제외한 모든 로그 파일 제거

현재 로그 파일을 제외한 모든 로그 파일 제거

내 sip 서버는 매 시간마다 3개의 로그 파일을 생성합니다.

Progress-23May2017-10-00hrs.log Call-23May2017-10-00hrs.log Error-23May2017-10-00hrs.log

따라서 현재 시간 로그를 제외한 다른 모든 로그 파일을 삭제해야 합니다. 이 명령으로 시도했습니다

 find . -type f -name "*-23May2017-10-00hrs.log" -print

현재 시간의 로그 파일 세 개를 인쇄했습니다.

그래서 현재 시간 로그와 일치하지 않는 파일을 확인하기 위해 이 명령을 시도했을 때.

find . -type f -name "!(*-23May2017-10-30hrs.log)" -print

그것은 나에게 아무것도주지 않습니다.

다른 로그 파일을 삭제하려면 어떻게 해야 합니까?

답변1

find /home/fi -maxdepth 1 -iname log\* -type f -mmin +1800 | sort | head -n -1 | xargs rm

답변2

우선, 찾기 프로세스가 이스케이프되지 않으므로 와일드카드가 *변환됩니다. 이를 방지하려면 백슬래시를 사용 \하거나 작은따옴표를 사용할 수 있습니다.'

그래서: find . -type f -name '*-23May2017-10-00hrs.log' -print 잘 작동해야 합니다.

실제 질문으로 돌아가서: 이를 해결하는 방법에는 여러 가지가 있습니다. 먼저 find -mtime기능을 사용하여 마지막 수정이 x분 전인 모든 파일을 들을 수 있습니다. 귀하의 SIP 서버가 다음 위치에 로그한다고 가정해 보겠습니다./var/log/sip/

find /var/log/sip/ -type f -name '*.log' -mmin +$((24*60)) -print.log로 끝나는 모든 파일 과 24*60분(1일) 전에 마지막으로 수정된 파일이 표시됩니다 .

그러나 로깅 처리를 위해 만들어진 도구를 사용할 수도 있습니다 logrotate.

logrotate는 모든 주요 유닉스 배포판에서 사용할 수 있으며 특정 기간에 파일을 압축하고 다른 기간에 제거하는 등의 작업을 수행할 수 있습니다. 기능 목록이 꽤 깁니다. 설치가 쉽고 데몬으로 실행되며 추가 cronjob을 조작할 필요가 없습니다.

내 제안은 logrotate를 사용하는 것입니다. 다음 사이트에서 그 단순함을 확인하세요.https://linux.die.net/man/8/logrotate

관련 정보