저는 2년 동안 매일 여러 개의 로그 파일을 추가해 왔으며 90일보다 오래된 모든 로그 파일을 정리하고 싶습니다. 지난 몇 년간의 날짜를 포함할 수 있나요? 예를 들어, 90..1000은 3개월이 넘은 파일부터 지난 몇 년까지의 파일을 삭제합니까?
답변1
로그 파일을 수동으로 관리하는 것은 복잡합니다. 로그 파일은 어떻게 사용되나요? 정기적으로 업데이트됩니까, 아니면 장기 실행 프로세스(데몬)가 지속적으로 열려 있습니까? 후자라면 데몬으로 뭔가를 해야 합니다(신호 보내기 또는 다시 시작하기). man
데몬 페이지를 읽어보세요 .
로그 파일( big.log
)이 어떤 프로세스에서도 열리지 않은 경우(검사를 통해 sudo lsof $PWD/big.log
) date
명령( man date
)을 " " 및 " " 형식 지정 옵션과 함께 사용하여 90일보다 오래된 로그 파일을 사용된 것과 동일한 형식으로 생성합니다.--date="today - 90 days"
+
big.log
# Warning: bash pseudo-code due to fuzziness of spec
# Warning: run any derived code through https://shellcheck.net
# **UNTESTED**
# You: Backup big.log, Just In Case
longago="$(date --date="today - 90 days" +"%...")"
# find the line number of the first occurence of the long ago date.
# only want the 1st match,
# only want the line number (up to the colon)
firstkeep="$(grep -n "$longago" big.log | head -n1 | cut -d: -f1)"
# left as an exercise: what if there are no logs on $longago?
# simple check?
[[ -z "$firstkeep" ]] && \
error ...
# now, just keep from $firstkeep to the end
tail -n "$firstkeep" big.log
>small.log
# now, check small.log (add tests)
wc -l big.log small.log
# when you're satisfied with small.log
# If the first mv works, do the second
mv big.log big.log.old && mv small.log big.log
# finally, when you're satisfied with the new, smaller big.log.
df.;rm big.log.old;df .
이 모든 명령에는 man
페이지가 있습니다. 필요에 따라 읽어 보십시오 man bash
.