파일을 압축하고 자르려면 다음 명령을 사용하고 있습니다. 이것을 하나의 명령으로 결합하는 데 도움이 필요합니다.
find *scan*.log -type f -size +1G |xargs -L1 -I file zip file.zip file
find *scan*.log -type f -size +1G |xargs -L1 -I file truncate -s 5000 file
답변1
find로 찾은 각 파일에 대해 여러 작업을 수행하는 일반적인 방법은 다음과 같습니다.
find . -name '*scan*.log' -type f -size +1G -exec sh -c \
'for f in "$@"; do XXX "$f" ; YYY "$f" ; ZZZ "$f" ; done' \
sh {} +
그러면 sh가 find에 전달한 각 파일 이름에 대해 XXX, YYY 및 ZZZ 프로그램이 한 번씩 실행되어 동일한 파일 이름이 각 명령에 차례로 전달됩니다.
로그 파일을 회전하려면 다음과 같은 것이 필요할 수 있습니다.
find . -name '*scan*.log' -type f -size +1G -exec sh -c \
'for f in "$@"; do
mv "$f" "$f.old"
pkill -1 <processname>
gzip -9 "$f.old"
done' sh {} +
<processname>
로그 파일을 작성하는 프로세스의 이름은 어디에 있습니까? 이렇게 하려면 HUP 신호에서 로그 파일을 닫았다가 다시 열도록 작성해야 합니다. 그렇지 않으면 프로그램에 적합한 방법(프로세스 종료 및 다시 시작 포함)을 사용하십시오.
또는 더 나은 방법은 logrotate
패키지를 설치하고 사용하는 것입니다.